Мой скрипт php получает строки из таблицы MySQL, которые содержат такие строки, как:
$string = 'ï¼’ã¤ã®ä¹³é…¸èŒã®ç¨';
Есть ли способ вывести эти виды строк в браузер, не получая «Запрещенную кодовую точку» при запуске документа через валидатор HTML5?
Я пробовал следующее:
htmlspecialchars($string);
htmlspecialchars($string, ENT_SUBSTITUTE, 'UTF-8');
htmlspecialchars($string, ENT_DISALLOWED, 'UTF-8');
htmlspecialchars(mb_convert_encoding($string, 'UTF-8');
но все эти выражения по-прежнему приводят к ошибке «Запрещенная кодовая точка». Кодировка веб-страницы уже установлена в UTF-8 через метатег:
<meta charset="UTF-8">
Функция PHP htmlentities()
может быть то, что вы ищете.
Эта функция преобразует соответствующие символы, введенные в нее, в объекты HTML.
Например:
$string = 'ï¼’ã¤ã®ä¹³é…¸èŒã®ç¨';
$string = htmlentities($string);
echo $string;
Преобразует вашу строку ï¼’ã¤ã®ä¹³é…¸èŒã®ç¨
в ï¼’ã¤ã®ä¹³é…¸èŒã®ç¨uml;
который может быть использован для отображения на странице HTML без ошибок.
Более подробную информацию об этой функции можно найти здесь: https://secure.php.net/manual/en/function.htmlentities.php
Решение, которое работало для меня, было:
htmlspecialchars($string, ENT_SUBSTITUTE | ENT_DISALLOWED);
Это преобразовало как можно больше символов в UTF-8 и удалило все остальное.