1
  

它几乎不像是需要净化的 html 代码。

当它显然应该是一个空格时,为什么 htmlpurifier 将该字符串变成一个问号?

我确切的 html 净化代码是:

//purify the html input
include_once('inc/htmlpurifier-4.4.0/library/HTMLPurifier.auto.php');

$config = HTMLPurifier_Config::createDefault();
$config->set('Core.Encoding', 'UTF-8');
$config->set('HTML.Doctype', 'HTML 4.01 Transitional');

if (defined('PURIFIER_CACHE')) {
    $config->set('Cache.SerializerPath', PURIFIER_CACHE);
} else {
    # Disable the cache entirely
    $config->set('Cache.DefinitionImpl', null);
}

$input = $_POST["about_me"];

# Help out the Purifier a bit, until it develops this functionality
while (($cleaner = preg_replace('!<(em|strong)>(\s*)</\1>!', '$2', $input)) != $input) {
    $input = $cleaner;
}

$filter = new HTMLPurifier($config);
$htmlpurified_output = $filter->purify($input);

我在我的 php 页面标题中启用了 utf8,并且在保存信息时也为 mysql 启用了 utf8。

我能够在同一页面上的其他文本区域内写入、保存到数据库并重新显示其他 UTF8 字符。罪魁祸首肯定是 htmlpurifier 返回问号而不是实际字符。

我会回答我能回答的任何其他问题。

4

1 回答 1

2

而答案是……

始终确保您的编码在所有区域都正确设置。

我将表的“about_me”行仅设置为接受 ascii 字符。呃。

很抱歉浪费了大家的时间。

于 2012-05-24T23:23:43.650 回答