1

我有一堆文件,这些文件大部分应该是 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);在db连接后执行成立,大部分导入的文件要么是utf8要么是iso-8859-1。

4

2 回答 2

0

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

于 2011-07-04T07:57:45.737 回答
0

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

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

于 2011-07-04T05:20:43.247 回答