2015-07-10 31 views
0

我有内部文本链接:链接净化

$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); 

净化取代我怎样才能防止这种情况的链接,<的性格&?

+0

您可以将某些字符列入白名单,看看[这里](http://htmlpurifier.org/phorum/read.php?3,5293,5294)。 – Andrew

回答

2

当我运行代码,我得到了想要的结果:

<?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&amp;var2=2 more text 

注意,符号已经正确转义。它必须是代码中其他地方的错误。

+0

Edward S. Yang。结果不是&符号转义。结果是奇怪的ascii字符类似于< – David

+0

大卫,你如何运行我的示例代码?你能否给我们更多关于你的设置的细节?我在命令行上运行它。 –

+0

哦,你是对的,问题应该是另一个。谢谢Edward S. Yang – David

0

我没有使用这个库,但我很好奇你为链接定义($ def),并且从来没有将它设置在净化器上。

从我的角度考虑,将“<”字符列入白名单并不合适。如果配置正确,应该由净化器处理。

+0

是s.Löwe,但这对我的问题并不重要,因为不是标签只是以纯文本形式写入的链接。 – David