PHP конвертировать иностранные символы с акцентами - PullRequest
3 голосов
/ 25 апреля 2011

Привет. Я пытаюсь сравнить некоторый текст с текстом в базе данных. В базе данных любой текст с акцентом кодируется, как в html (т. Е. & Eacute;), когда я сравниваю текст базы данных с моей строкой. не совпадают, потому что моя строка просто показывает é .. когда я использую функцию php htmlentities, чтобы сначала закодировать строку, é превращается в & Atilde; & copy; странно? использование htmlspecialchars вообще не кодирует é ..

как бы вы предложили мне сравнить é с & eacute; а также все другие акцентированные символы?

Ответы [ 5 ]

13 голосов
/ 25 апреля 2011

Вам необходимо отправить правильную кодировку htmlentities.Похоже, вы используете UTF-8, но по умолчанию используется ISO-8859-1.Измените его следующим образом:

$encoded = htmlentities($text, ENT_COMPAT, 'UTF-8');

Другое решение заключается в преобразовании текста в ISO-8859-1 перед кодированием, но это может уничтожить информацию (ISO-8859-1 содержит не так много символов, как UTF-8).Если вы хотите попробовать это вместо этого, сделайте так:

$encoded = htmlentities(utf8_decode($text));
5 голосов
/ 15 февраля 2013

Я работаю на французском сайте, и у меня тоже была такая же проблема. Это функция, которую я использую.

function convert_accent($string)
{
    return htmlspecialchars_decode(htmlentities(utf8_decode($string)));
}

Что он делает, он декодирует вашу строку в utf8, чем конвертирует все сущности HTML. четные метки Но мы хотим преобразовать теги обратно в нормальное состояние, чем htmlspecialchars_decode преобразует их обратно. Таким образом, в конце вы получите строку с преобразованными акцентами, не касаясь тегов. Вы можете использовать эту функцию для передачи содержимого своей электронной почты перед отправкой получателю.

Другая проблема, с которой вы можете столкнуться, заключается в том, что иногда с помощью этой функции содержимое базы данных преобразуется в? , В этом случае вы должны сделать это перед выполнением запроса:

mysql_query("SET NAMES `utf8`");

Но вам может понадобиться это сделать, это зависит от кодировки в вашей таблице. Надеюсь, это поможет.

2 голосов
/ 13 февраля 2015

Недавно столкнулся с похожими проблемами. Последовал за ответом Эмиля, и он работал хорошо локально, но не в наших средах разработки / сцены. Я закончил тем, что использовал это, и это работало вокруг:

$title = html_entity_decode(utf8_decode($item));

Спасибо, что привели меня в правильном направлении!

1 голос
/ 22 ноября 2013

Используйте просто как удар, это работает для норвежских символов:

function convert_accent($string)
{
    return htmlspecialchars(utf8_decode($string));
}
1 голос
/ 25 апреля 2011

Задача сравнения связана с набором символов и параметрами сортировки, выбранными при создании базы данных или таблиц. Если вы сохраняете строки с большим количеством акцентов, таких как испанский, я предлагаю вам использовать кодировку uft8, и сопоставление может быть более точным для языка (английский, французский или любой другой), который вы используете.

Лучшее использование правильного набора символов в базе данных - это то, что вы можете сохранить строку естественным образом, например: мое имя, я могу сохранить ее как "Mario Juárez", и мне не нужно делать какие-то странные преобразования.

...