我在文本中有一个链接:
$va="Some text http://www.stackoverflow.com?var=1&var2=2 more text"当用这个净化时:
$config = HTMLPurifier_Config::createDefault();
$config->set('URI.MakeAbsolute', false);
$config->set('HTML.SafeObject', true);
$config->set('Output.FlashCompat', true);
$config->set('URI.AllowedSchemes',
array (
'http' => true,
'https' => true,
'mailto' => true
));
$def = $config->getHTMLDefinition(true);
$def->addAttribute('a', 'target', 'Enum#_blank,_self,_target,_top');
$def->addAttribute('a', 'data-width', 'Text');
$def->addAttribute('a', 'data-height', 'Text');
$def->addAttribute('a', 'id', 'Text');
$def->addAttribute('a', 'name', 'Text');
$purifier = new HTMLPurifier($config);
$va = $purifier->purify($va);Purify替换字符&链接的“如何防止这种情况?”
发布于 2015-07-10 16:28:52
当我运行您的代码时,我得到了所需的结果:
<?php
ini_set('display_errors', TRUE);
error_reporting(E_ALL);
include_once 'library/HTMLPurifier.auto.php';
$raw = 'Some text http://www.stackoverflow.com?var=1&var2=2 more text';
$config = HTMLPurifier_Config::createDefault();
$config->set('URI.MakeAbsolute', false);
$config->set('HTML.SafeObject', true);
$config->set('Output.FlashCompat', true);
$config->set('URI.AllowedSchemes',
array (
'http' => true,
'https' => true,
'mailto' => true
));
$def = $config->getHTMLDefinition(true);
$def->addAttribute('a', 'target', 'Enum#_blank,_self,_target,_top');
$def->addAttribute('a', 'data-width', 'Text');
$def->addAttribute('a', 'data-height', 'Text');
$def->addAttribute('a', 'id', 'Text');
$def->addAttribute('a', 'name', 'Text');
$purifier = new HTMLPurifier($config);
echo $purifier->purify($raw);我得到了
Some text http://www.stackoverflow.com?var=1&var2=2 more text请注意,该符号已正确地转义。它一定是代码中其他地方的一个bug。
发布于 2015-07-10 12:28:51
我没有使用这个库,但奇怪的是,您为链接($def)做了定义,并且从未将其设置在净化器上。
从我的观点来看,白名单上的"<“字符不是正确的解决方案。如果其配置正确,则应由净化器处理。
https://stackoverflow.com/questions/31340519
复制相似问题