PHP конвертирует иностранные символы с акцентами
Привет я пытаюсь сравнить какой-то текст с текстом в базе данных.. в базе данных любой текст с ударением кодируется как в html (т. е. é) когда я сравниваю текст базы данных с моей строкой, он не совпадает, потому что моя строка просто показывает é .. когда я использую функцию php htmlentities для кодирования строки сначала é превращается в © странно? использование htmlspecialchars не кодирует é вообще..
Как бы вы предложили мне сравнить é с é, а также все другие акцентированные символы?
5 ответов:
Вам нужно отправить правильную кодировку в htmlentities. Похоже, что вы используете UTF-8, но по умолчанию используется ISO-8859-1. Измените его следующим образом:
Другое решение заключается в преобразовании текста в ISO-8859-1 перед кодированием, но это может привести к уничтожению информации (ISO-8859-1 не содержит почти столько символов, сколько UTF-8). Если вы хотите попробовать это вместо этого, сделайте так:$encoded = htmlentities($text, ENT_COMPAT, 'UTF-8');
$encoded = htmlentities(utf8_decode($text));
Я работаю на французском сайте, и у меня тоже была такая же проблема. Это функция, которую я использую.
function convert_accent($string) { return htmlspecialchars_decode(htmlentities(utf8_decode($string))); }
Что он делает, он декодирует вашу строку в utf8, чем преобразует все HTML-сущности. даже бирки. Но мы хотим преобразовать теги обратно в нормальное состояние, чем htmlspecialchars_decode преобразует их обратно. Таким образом, в конце концов вы получите строку с преобразованными акцентами, не касаясь тегов. Вы можете использовать эту функцию для передачи содержимого электронной почты перед отправкой получателю.
Еще один проблема, с которой вы можете столкнуться, заключается в том, что иногда с помощью этой функции содержимое базы данных преобразуется в ? . В этом случае вы должны сделать это перед запуском запроса:
mysql_query("SET NAMES `utf8`");
Но вам, возможно, придется это сделать, это зависит от кодировки в вашей таблице. Надеюсь, это поможет.
Недавно столкнулся с аналогичными проблемами. Последовал ответ Эмиля, и это сработало хорошо локально, но не в нашей среде разработки/сцены. Я в конечном итоге использовал это, и это работало повсюду:
$title = html_entity_decode(utf8_decode($item));
Спасибо что указал мне в правильном направлении!
Задача сравнения связана с набором символов и параметрами сортировки, выбранными при создании базы данных или таблиц. Если вы сохраняете строки с большим количеством акцентов, таких как испанский, я предлагаю вам использовать кодировку uft8, и параметры сортировки могут быть более точными для языка(английского, французского или любого другого), который вы используете.
Самое лучшее в использовании правильной кодировки в базе данных-это то, что вы можете сохранить строку естественным образом, например: мое имя я могу сохранить его как "Марио Хуарес", и я не нужно делать какие-то странные преобразования.