2013-04-02 87 views
0

內部的某些字符串我有這個字符串:htmlentites HTML標籤

$str = "<ul><li>Eüro!</li><li>100 %</li><li>Jäckö<br></li></ul>";

我打算做使用htmlentities()這些<li></li>內的字符串。因此,它會想出這樣的:

$str = "<ul><li>E&uuml;ro!</li><li>100 %</li><li>J&auml;ck&ouml;<br></li></ul>";

有沒有一種方法或解決方法與htmlentities()不轉換整個字符串?

&lt;ul&gt;&lt;li&gtE&uuml;ro!&lt;/li&gt;&lt;li&gt;100 %&lt;/li&gt;&lt;li&gt;J&auml;ck&ouml;&lt;br&gt;&lt;/li&gt;&lt;/ul&gt;

回答

-1

您可以創建自己的替換功能:

function parseAccents($in) { 
    $out=$in; 
    $toreplace=array(
     array('ü', '&uuml;'), 
     array('ä', '&auml;'), 
     array('ö', '&ouml;') 
     // ... 
    ); 
    for($i=0; $i<count($toreplace); $i++) $out=str_replace($toreplace[$i][0], $toreplace[$i][1], $out); 
    return $out; 
} 

編輯:如果你不這樣做,因爲如果我根本就htmlentities($str),將整個字符串,這將導致轉換成要設置口音的完整列表,您可以使用此模型:

function parseAccents($in) { 
    $out=htmlentities($in); 
    $toreplace=array(
     array('&lt;', '<'), 
     array('&gt;', '>'), 
     // ... 
    ); 
    for($i=0; $i<count($toreplace); $i++) $out=str_replace($toreplace[$i][0], $toreplace[$i][1], $out); 
    return $out; 
} 
+0

但由此我必須知道哪些字符將被輸入。我更喜歡'htmlentites',因爲我可能不知道里面有什麼。 – fishcracker

+1

然後你可以使用htmlentities,並替換<和> –

+0

這將是怎樣的? – fishcracker

0

documentation,你可以看到你有一些標誌:

string htmlentities (string $string [, int $flags = ENT_COMPAT | ENT_HTML401 [, string $encoding = 'UTF-8' [, bool $double_encode = true ]]]) 

所以,你可以看到輸出從這裏一些字符串:

<?php 
    $str = "A 'quote' is <b>bold</b>"; 

    // Produces: A 'quote' is &lt;b&gt;bold&lt;/b&gt; 
    echo htmlentities($str); 

    // Produces: A &#039;quote&#039; is &lt;b&gt;bold&lt;/b&gt; 
    echo htmlentities($str, ENT_QUOTES); 
?> 

我認爲這將取決於您的默認則charCode,所以你也許可以嘗試不同的標誌。

+0

我的報價沒有問題。 – fishcracker

+0

引用示例僅是標誌用法的示例。無論如何,我認爲你正在使用錯誤的功能。 AFAIK,htmlentities()具有不同於僅替換某些語言特定字符的目的。 – Azurlake

0

找到一種方法,不要將它作爲單個字符串傳遞,直到您擁有htmlentities() - 子函數。將它視爲一系列列表項目,然後在建立它們的<ul>時調用它們中的每一個的htmlentities。其他任何事情都意味着你有很高的XSS漏洞機會。

0
$str = '<ul><li>Eüro!</li><li>100 %</li><li>Jäckö<br></li></ul>'; 


function update_li_content($text){   
    return "<li>".htmlentities($text[1])."</li>"; 
} 

$reg = "#<li>(.*?)</li>#"; 

$filter_data = preg_replace_callback ($reg, "update_li_content", $str); 

echo $filter_data;