PHP конвертирует иностранные символы с акцентами


Привет я пытаюсь сравнить какой-то текст с текстом в базе данных.. в базе данных любой текст с ударением кодируется как в html (т. е. é) когда я сравниваю текст базы данных с моей строкой, он не совпадает, потому что моя строка просто показывает é .. когда я использую функцию php htmlentities для кодирования строки сначала é превращается в © странно? использование htmlspecialchars не кодирует é вообще..

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

5 3

5 ответов:

Вам нужно отправить правильную кодировку в 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`");

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

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

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

Спасибо что указал мне в правильном направлении!

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

Самое лучшее в использовании правильной кодировки в базе данных-это то, что вы можете сохранить строку естественным образом, например: мое имя я могу сохранить его как "Марио Хуарес", и я не нужно делать какие-то странные преобразования.

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

function convert_accent($string)
{
    return htmlspecialchars(utf8_decode($string));
}