PHP вырезать не-SGML символы из строки? - PullRequest
2 голосов
/ 12 июля 2011

У меня из базы данных появляются нестандартные символы (из-за разрывов строк).

Мой валидатор HTML жалуется на них.

Поскольку мой HTML-валидатор является прямым продолжением моего эго, я бы хотел, чтобы все было хорошо и green-ok-arrow-y.

Есть ли у кого-то, кто делал это раньше, быстрое исправление?

Кстати, я не хочу менять кодировку страницы, тип документа или данные. Просто ищу вещь типа utf8_decode(), которая бы очистила строку, но utf8_encode() и utf8_decode() не работают ...

UPDATE

Извините, "нестандартные символы" немного расплывчаты, но также и это предупреждение об ошибке. В частности, они , а не символы SGML, которые, очевидно, не соответствуют синтаксическому анализатору SGML ... но теперь я попадаю на размытую территорию, не зная, что происходит.

1 Ответ

2 голосов
/ 12 июля 2011

Если под нестандартными символами вы подразумеваете, что валидатор XHTML видит символы в вашем документе, которые не разрешены спецификацией XML, которая находится здесь: http://www.w3.org/TR/xml/#charsets, тогда ваше решение состоит в том, чтобы использовать сущности XML, чтобы их избежать. Например, если у вас есть недопустимый символ U + 0004, вы можете превратить его в  в PHP, прежде чем выписать его.

Если под нестандартными символами вы имеете в виду, что ваша последовательность байтов настолько повреждена, что она не является допустимой последовательностью байтов UTF-8 (то есть она не может быть декодирована), то в вашем приложении возникла логическая ошибка. Возможно, вы читаете байты вместо того, чтобы просить PHP прочитать символы и правильно их кодировать.

РЕДАКТИРОВАТЬ: В ответ на комментарий выше о том, что недопустимым символом является число 30, это действительно недопустимый символ в XML и, следовательно, XHTML. Если вы хотите, чтобы они были переносами строк, выполните подстановку php regex, чтобы заменить \x1E на \n.

...