Привет, я пытаюсь сравнить текст с текстом в базе данных .. в базе данных любой текст с акцентом кодируется, как в html (ie. & Eacute;), когда я сравниваю текст базы данных с моей строкой, которая не соответствует потому что моя строка просто показывает é .. когда я использую hpmlentities php для кодирования строки сначала, é превращается в Ã © weird? Использование htmlspecialchars не кодирует é вообще.
как бы вы посоветовали сравнить é с é, а также с другими акцентированными персонажами?
Вам нужно отправить правильную кодировку в 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));
Я работаю на французском сайте, и у меня тоже была такая же проблема. Это функция, которую я использую.
function convert_accent($string) { return htmlspecialchars_decode(htmlentities(utf8_decode($string))); }
Что он делает, он расшифровывает вашу строку в utf8, чем преобразует все объекты HTML. даже теги. Но мы хотим преобразовать теги в нормальное состояние, чем htmlspecialchars_decode вернет их обратно. Таким образом, в конце вы получите строку с преобразованными акцентами, не касаясь тегов. Вы можете использовать эту функцию через свой адрес электронной почты перед отправкой его получателю.
Другая проблема, с которой вы можете столкнуться, заключается в том, что иногда с этой функцией конвертируется содержимое из базы данных? , В этом случае вы должны сделать это, прежде чем запускать свой запрос:
mysql_query("SET NAMES `utf8`");
Но вам может понадобиться это сделать, это зависит от кодировки в вашей таблице. Я надеюсь, что это помогает.
В последнее время возникли аналогичные проблемы. Затем последовал ответ Эмиля, и он работал нормально, но не на наших средах dev / stage. Я закончил тем, что использовал это, и он работал повсюду:
$title = html_entity_decode(utf8_decode($item));
Спасибо, что вел меня в правильном направлении!
Задача сравнения связана с кодировкой и сортировкой, выбранной при создании базы данных или таблиц. Если вы сохраняете строки с большим количеством акцентов, таких как испанский, я предлагаю вам использовать charset uft8, и сортировка может быть более точной для языка (английский, французский или любой другой), который вы используете.
Лучше всего использовать правильную кодировку в базе данных, так как вы можете сохранить строку естественным образом, например: мое имя, которое я могу сохранить, как это «Марио Хуарес», и мне не нужно делать какие-то странные преобразования.
Используйте просто как удар, он работает для норвежских персонажей:
function convert_accent($string) { return htmlspecialchars(utf8_decode($string)); }