удалить недействительные символы из HTML-документа - PullRequest
1 голос
/ 04 июля 2011

У меня есть куча файлов, которые по большей части должны быть HTML-документами, однако иногда редакторы копируют и вставляют в него текст из других источников, так что теперь я время от времени сталкиваюсь с некоторыми странными символами - для Например, некодированный знак авторского права, или странные вещи, которые выглядят как тире или минус, но представляют собой нечто иное (ascii # 146?), или один символ, который выглядит как «...». Я взглянул на get_html_translation_table (), однако это заменит только «обычные» специальные символы, такие как &, знаки евро и т. д., но мне кажется, что мне нужно регулярное выражение и указать только разрешенные символы и отбросить все неизвестные символы. Я попробовал это здесь, но это не сработало вообще:

function fixNpChars($string)
{
    //characters in the hexadecimal ranges 00–08, 0B–0C, 0E–1F, 7F, and 80–9F cannot be used in an HTML document, not even by reference.
    $pattern = '/[\x{0000}-\x{0008}][\x{000B}-\x{000C}][\x{000E}-\x{001F}][\x{0080}-\x{009F}][x{007F}]/u';
    $replacement = '';
    return preg_replace($pattern, $replacement, $string);   
}

Есть идеи, что здесь не так?

EDIT:

База данных, в которой я храню свои импортированные файлы и сторона php, настроена на utf-8 (тип содержимого utf-8, кодировка таблицы базы данных utf8 / utf8_general_ci, mysql_set_charset ('utf8', $ this-> mHandle); выполнена; после установления соединения с БД. Большинство импортируемых файлов - это либо utf8, либо iso-8859-1.

Ответы [ 2 ]

0 голосов
/ 04 июля 2011

Не думайте, что удаление недопустимых символов - лучший вариант, эту проблему можно решить с помощью функций htmlentities и html_entity_decode.

0 голосов
/ 04 июля 2011

Ваш синтаксис регулярных выражений выглядит немного проблематично.Может быть, это?

1002 *$pattern = '/[\x00-\x08][\x0B-\x0C][\x0E-\x1F][\x80-\x9F][x7F]/u';
...