удалить недопустимые символы из html-документа

У меня есть куча файлов, которые должны быть 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);   
}

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

РЕДАКТИРОВАТЬ:

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


person iHaveacomputer    schedule 04.07.2011    source источник
comment
мне кажется, что str_replace будет здесь проще, лучше и читабельнее, хотя мне тоже нравится использовать Скорпиона в Halo, чтобы убивать пехотинцев, это весело.   -  person Itay Moav -Malimovka    schedule 04.07.2011
comment
Единственный символ, который выглядит как ..., называется многоточием …/… и не должен создавать проблем в HTML-документе при использовании utf-8. Скорее всего, вы делаете что-то не так. Пожалуйста, уточните вопрос.   -  person Gordon    schedule 04.07.2011


Ответы (2)


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

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

person jerluc    schedule 04.07.2011

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

person Chandrakiran K S    schedule 04.07.2011
comment
Из того, что я прочитал, некоторые символы не разрешены в html, даже по ссылке (см. комментарий в моем коде). я не могу использовать htmlentities, потому что по большей части это уже html-текст, это превратит все ‹ и › в и и разобьет его. - person iHaveacomputer; 05.07.2011