我有一个数据库,我正在重建的表结构很糟糕,所以我把一些数据从一个表移植到另一个表。这些数据似乎是从MSO的产品中复制粘贴过来的,所以当我获得这些数据时,我用htmlpurifier和php中的一些str_replace进行了清理。下面是一个干净的函数:
function clean_html($html) {
$config = HTMLPurifier_Config::createDefault();
$config->set('AutoFormat','RemoveEmpty',true);
$config->set('HTML','AllowedAttributes','href,src');
$config->set('HTML','AllowedElements','p,em,strong,a,ul,li,ol,img');
$purifier = new HTMLPurifier($config);
$html = $purifier->purify($html);
$html = str_replace(' ',' ',$html);
$html = str_replace("\r",'',$html);
$html = str_replace("\n",'',$html);
$html = str_replace("\t",'',$html);
$html = str_replace(' ',' ',$html);
$html = str_replace('<p> </p>','',$html);
$html = str_replace(chr(160),' ',$html);
return trim($html);
}但是,当我将结果放入我的新表中并将它们输出到ckeditor时,我得到了这三个字符。
然后,我有一个javascript函数,它被调用来从ckeditor的内容中删除特殊字符。它也不会清洗它
function remove_special(str) {
var rExps=[ /[\xC0-\xC2]/g, /[\xE0-\xE2]/g,
/[\xC8-\xCA]/g, /[\xE8-\xEB]/g,
/[\xCC-\xCE]/g, /[\xEC-\xEE]/g,
/[\xD2-\xD4]/g, /[\xF2-\xF4]/g,
/[\xD9-\xDB]/g, /[\xF9-\xFB]/g,
/\xD1/,/\xF1/g,
"/[\u00a0|\u1680|[\u2000-\u2009]|u200a|\u200b|\u2028|\u2029|\u202f|\u205f|\u3000|\xa0]/g",
/\u000b/g,'/[\u180e|\u000c]/g',
/\u2013/g, /\u2014/g,
/\xa9/g,/\xae/g,/\xb7/g,/\u2018/g,/\u2019/g,/\u201c/g,/\u201d/g,/\u2026/g];
var repChar=['A','a','E','e','I','i','O','o','U','u','N','n',' ','\t','','-','--','(c)','(r)','*',"'","'",'"','"','...'];
for(var i=0; i<rExps.length; i++) {
str=str.replace(rExps[i],repChar[i]);
}
for (var x = 0; x < str.length; x++) {
charcode = str.charCodeAt(x);
if ((charcode < 32 || charcode > 126) && charcode !=10 && charcode != 13) {
str = str.replace(str.charAt(x), "");
}
}
return str;
}有没有人知道我要怎么做才能摆脱他们。我认为它们可能是某种引用。
发布于 2010-03-25 22:19:06
你的字符编码都不正常。-��对我来说是一个三字节的UTF-8编码字符。
一些你需要发现的事情
它看起来像HTMLPurifier's default is UTF-8,所以您真的需要注意数据的编码!
发布于 2010-03-25 21:42:36
有一个类似的问题:php remove/identify this symbol �
字符REPLACEMENT CHARACTER (U+FFFD)为�。它在UTF代码中出现错误时使用:
FFFD � REPLACEMENT CHARACTER
- used to replace an incoming character whose value
is unknown or unrepresentable in Unicode在大多数情况下,这意味着某些数据是用UTF编码解释的,而数据不是用这种编码而是用不同的编码来编码的。
我的问题是将文本从microsoft office产品粘贴到html或数据库中。最大的违规者似乎是emdash和聪明的引语。
https://stackoverflow.com/questions/2515905
复制相似问题