我有一堆文件,大部分应该是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';
不要认为删除无效字符是最好的选择,这个问题可以使用htmlentities
和html_entity_decode
函数来解决。