2011-07-04 23 views
1

我有一堆文件应该是大部分的html文档,但有时编辑复制&将其他来源的文本粘贴到其中,所以现在我遇到了一些奇怪的字符 - 例如非编码的版权符号,或奇怪的东西,看起来像一个破折号或减号,但是别的东西(ascii#146?),或单个字符看起来像“......”。 我看了一下get_html_translation_table(),但是这只会替换“常见”的特殊字符,如&,欧元符号等,但似乎我需要正则表达式并只指定允许的字符并丢弃所有未知的字符。我想这在这里,但这个没有工作在所有:从html文档中删除无效字符

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(内容类型UTF8,db表字符集UTF8/utf8_general_ci,mysql_set_charset( 'utf-8',$这个 - > mHandle); DB连接建立后执行的大多数导入的文件是UTF8或ISO-8859-1

+2

在我看来,str_replace在这里是一个更简单,更好,更易读的选择,尽管我也喜欢在Halo中使用Scorpion杀死这些咕噜声,这很有趣。 –

+0

看起来像“...”的单个字符被称为省略号...... ......当使用utf-8时,不应该在HTML文档中提出问题。机会是,你做错了什么。请澄清这个问题。 – Gordon

回答

0

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

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

0

不要想到删除无效字符作为最佳选择,则可以使用htmlentitieshtml_entity_decode函数来解决此问题。

+0

从我读过的内容来看,一些字符在html中是不允许的,甚至不能通过引用(请参阅我的代码中的注释)。 我不能使用htmlentities,因为它大部分都是html文本,这样做会将所有< and >转换为>和<并将其分解。 – iHaveacomputer