我正在使用 TinyMCE 生成一些 HTML。请注意,TinyMCE 使用 <p> </p>
创建行间距.
然后我使用 HTMLPurifier 净化 HTML。请注意,行空间转换为 <p> </p>
.
然后我使用 PHP 的 DOMDocument 执行一些 DOM 操作。我希望净化 HTML 执行 DOM 操作,并将做更多的修改,但只是显示下面的部分来演示问题。请注意,行空间转换为 <p>Â </p>
.
为什么会这样?
我找到的两个解决方案是剥离 Â
在执行 DOM 操作并替换  
之后与 @nbsp
净化前,然后净化后更换回来。防止这种情况发生的最佳方法是什么?
//HTML created using TinyMCE and sent to server using jQuery Ajax Post
$message=trim($_POST['message']);
syslog(LOG_INFO,$message);
// Jul 28 09:39:24 devserver httpd: <p>Line 1</p>#012<p> </p>#012<p>Line 2</p>
$config = HTMLPurifier_Config::createDefault();
$config->set('Cache.SerializerPath',VS_TEMPORARY_SITE);
$purifier = new HTMLPurifier($config);
$message=$purifier->purify($message);
syslog(LOG_INFO,$message);
//Jul 28 09:39:24 devserver httpd: <p>Line 1</p>#012<p> </p>#012<p>Line 2</p>
$doc = new DOMDocument();
$doc->loadHTML($message);
$body = $doc->getElementsByTagName('body')->item(0);
$message=$doc->saveHTML($body); //Select the body tag
$message = str_replace(array('<body>', '</body>'), array('', ''), $message); //strip the body tags
syslog(LOG_INFO,$message);
//Jul 28 09:39:24 devserver httpd: #012<p>Line 1</p>#012<p>Â </p>#012<p>Line 2</p>
最佳答案
<p>Â </p>
在我看来像是字符集问题。实际上,当我写一个
,将其转换为 UTF-8 并以 ISO 8859-1 打开它,我得到了相同的结果。
因此,您的 PHP 代码似乎生成 UTF-8,并且您的浏览器显示 ISO 8859-1。这会导致您的问题。您需要说服浏览器显示 UTF-8,或指示 HTMLPurifier 使用 ISO 8859-1 字符集输出。
关于php - 防止 HTMLPurifier 和 DOMDocument 转换为 Â,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25000392/