从html文档中删除无效的字符

时间:2011-07-04 05:15:50

标签: php html regex non-ascii-characters

我有一堆文件大部分应该是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 table charset utf8 / utf8_general_ci,mysql_set_charset('utf8',$ this-> mHandle);数据库连接建立后执行。大多数导入的文件是utf8或iso-8859-1。

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

不要考虑删除无效字符作为最佳选项,可以使用htmlentitieshtml_entity_decode函数解决此问题。