2016-02-03 66 views
1

我遇到了PHP HTMLPurifier庫的問題。我面臨的問題是與下面輸入字符串問題與HTMLPurifier在href鏈接盯着編號

< A HREF = 「HTTP:// 1plusone/COM /更新」 >更新</A >

對於上面的輸入,我得到純化的輸出作爲

< A HREF = 「/ COM /更新」 >更新< /一個>

我瀏覽了他們的文檔。但我無法爲這個問題找到解決方案。

源代碼:

require_once("/html_purifier/library/HTMLPurifier.auto.php"); 
$config = HTMLPurifier_Config::createDefault(); 
$text= "<a href=\"http://1plusone/com/Update\">Update</a>"; 
$oPurifier = new HTMLPurifier($config); 
$purifiedHtml= $oPurifier->purify($text); 
echo $purifiedHtml; 

我也試過這個live demo htmlpurifier的。它也給出了相同的結果。

請幫忙。

+1

你用來設置HTML淨化器的代碼是什麼? –

+0

嗨,愛德華,我已經更新了源代碼。我只是使用默認配置。 –

回答

0

看來,HTML淨化器拒絕主機名只有一個具有前導數字的部分。相關的代碼是在HTMLPurifier/AttrDef/URI/Host.php

// The productions describing this are: 
    $a = '[a-z]';  // alpha 
    $an = '[a-z0-9]'; // alphanum 
    $and = "[a-z0-9-$underscore]"; // alphanum | "-" 
    // domainlabel = alphanum | alphanum *(alphanum | "-") alphanum 
    $domainlabel = "$an($and*$an)?"; 
    // toplabel = alpha | alpha *(alphanum | "-") alphanum 
    $toplabel = "$a($and*$an)?"; 
    // hostname = *(domainlabel ".") toplabel [ "." ] 
    if (preg_match("/^($domainlabel\.)*$toplabel\.?$/i", $string)) { 
     return $string; 
    } 

一個簡單的修復可能會補丁這是更寬容。我不知道是否有更新的RFC允許您描述。