php - 防止 HTMLPurifier 和 DOMDocument 转换为 Â

标签 php html tinymce domdocument htmlpurifier

我正在使用 TinyMCE 生成一些 HTML。请注意,TinyMCE 使用 <p>&nbsp;</p> 创建行间距.

然后我使用 HTMLPurifier 净化 HTML。请注意,行空间转换为 <p> </p> .

然后我使用 PHP 的 DOMDocument 执行一些 DOM 操作。我希望净化 HTML 执行 DOM 操作,并将做更多的修改,但只是显示下面的部分来演示问题。请注意,行空间转换为 <p>Â </p> .

为什么会这样?

我找到的两个解决方案是剥离 Â在执行 DOM 操作并替换 &nbsp 之后与 @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>&nbsp;</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>在我看来像是字符集问题。实际上,当我写一个 &nbsp; ,将其转换为 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/

相关文章:

javascript - 将 Ajax 与 JQuery .on() 结合使用

php - MySQL 语法错误 1064 与 INSERT 语句

html - 使用 CSS 保持 div 的纵横比

javascript - Svg vs Canvas 和圆形对象的渲染时间

tinymce - Tinymce 添加自定义 HTML 标签

php - JSON 解析器无法转换我的字符串

php - 将HTML代码应用于php数组的每个元素的方法

javascript - 错误引用错误: $ is not defined at angular datatables

html - 如何在嵌入TinyMCE编辑器的页面中使用内部样式表?

tinymce - tinyMCE 撤消如何工作?