从html文档中删除无效字符


remove invalid chars from html document

我有一堆文件,大部分应该是html文档,但有时编辑器会复制&将其他来源的文本粘贴到其中,所以现在我不时会遇到一些奇怪的字符——例如,未编码的版权符号,或者看起来像破折号或减号但又是其他东西的奇怪东西(ascii#146?(,或者一个看起来像"…"的单个字符。我看了一下get_html_translation_table((,但这只会取代"常用"的特殊字符,如&,euro符号等,但我似乎需要regex,只指定允许的字符,并丢弃所有未知的字符。我在这里试过了,但根本不起作用:

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(;在数据库连接建立后执行。大多数导入的文件要么是utf8,要么是iso-8859-1。

您的正则表达式语法看起来有点问题。也许是这个?:

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

不要认为删除无效字符是最好的选择,这个问题可以使用htmlentitieshtml_entity_decode函数来解决。