2015-07-10 59 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