我正在使用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>
答案 0 :(得分:-1)
<p>Â </p>
看起来像是一个字符集问题。实际上,当我写一个
时,将其转换为UTF-8并将其打开为ISO 8859-1,我得到相同的结果。
您的PHP代码因此似乎生成UTF-8,并且您的浏览器显示ISO 8859-1。这会导致您的问题。您需要说服浏览器显示UTF-8,或者指示HTMLPurifier使用ISO 8859-1字符集输出。