Я пишу функцию сравнения строк для сортировки медицинских терминов, которые часто содержат специальные акцентированные символы из разных европейских языков, и мне нужно каким-то образом добиться сопоставления, аналогичного latin1_general_ci
.
MySQL.
Во-первых, я делаю некоторые базовые манипуляции со строками, чтобы удалить пробелы, кавычки, дефисы, скобки и т. Д. Проблема возникает, когда я передаю строки в strcoll()
с использованием локали по умолчанию, потому что это не очень разумно достаточно, чтобы считать, например, акцентированное e как лексикографически эквивалентное нормальному e.
Я осторожен в использовании локали, такой как немецкий или французский, потому что она, вероятно, не будет включать в себя все специальные символы, которые мне нужно учитывать. Есть ли локаль, которая даст мне что-то похожее на сопоставление latin1_general_ci
? Или, может быть, есть другое решение?
Моим наивным решением было бы создать большой ассоциативный массив для сопоставления акцентированных букв с их обычными буквенными эквивалентами, затем использовать это с str_replace()
, но это звучит медленно и утомительно (и подвержено ошибкам). Я бы предпочел использовать что-то встроенное в язык, если это возможно.
Также на этой ноте, strcmp()
или strcasecmp()
учитывает сопоставление текущей локали, или это просто strcoll()
, что делает это?