У меня есть запрос MySQL, который возвращает данные для форматирования в файл XML. Один из столбцов - это свободное текстовое поле, которое может содержать странные символы, которые «разбивают» XML с ошибкой кодирования. Я считаю, что эти символы представляют собой странные кавычки, которые превратились в запись из вставленного Microsoft Word, когда пользователь изначально вводил запись. Я не контролирую этот процесс.
Пример странного персонажа:
“TURN KEY – Totally Furnishedâ€
Я использую htmlspecialchars для «очистки» этих данных, и он в основном полностью удаляет поле из записи XML и делает его пустым для этой записи. Это устраняет проблему с кодировкой, но в этой записи теперь отсутствуют данные для этого поля. Мне все еще нужны эти данные, я просто хочу опустить или даже заменить странные символы чем-то вроде тире.
$description = htmlspecialchars($row['PropertyInformation'], ENT_QUOTES, 'UTF-8');
Выходные данные XML заканчиваются следующим образом в записях, где встречаются странные символы:
<DESCRIPTIF>
<![CDATA[ ]]>
</DESCRIPTIF>
3 ответа
Функция htmlspecialchars
возвращает пустую строку, если входная строка содержит недопустимую последовательность кодовых единиц в данной кодировке, если не установлены флаги ENT_IGNORE
или ENT_SUBSTITUTE
.
Флаг ENT_IGNORE
автоматически отбрасывает недопустимые последовательности кодовых единиц вместо того, чтобы возвращать пустую строку. Использование этого флага не рекомендуется, поскольку это может иметь последствия для безопасности.
ENT_SUBSTITUTE
falg заменяет недопустимые последовательности единиц кода на заменяющий символ Unicode U + FFFD (UTF-8) или & # FFFD; (в противном случае) вместо возврата пустой строки.
Вы можете попробовать установить один из этих флагов.
htmlspecialchars($string, ENT_QUOTES | ENT_SUBSTITUTE);
Похоже, вы забыли использовать utf-8 с большой буквы
$description = htmlspecialchars($row['PropertyInformation'], ENT_QUOTES, 'UTF-8');
/**
* Clean a string from non-printable chars
*
* @param string $string
* @return string
*/
function str_clean($string)
{
return preg_replace('/[\x00-\x1F\x80-\xFF]/', '', $string);
}
$string = '“TURN KEY – Totally Furnishedâ€';
echo htmlspecialchars(str_clean($string), ENT_QUOTES, 'UTF-8');
Похожие вопросы
Новые вопросы
php
PHP — это открытый, мультипарадигмальный, динамически типизированный и интерпретируемый язык сценариев, изначально разработанный для веб-разработки на стороне сервера. Используйте этот тег для вопросов о программировании на языке PHP.