2013-02-13 42 views
1

我打算從我的mysql表中獲取數據時使用我的自定義函數&將其打印爲html。由於htmlspecialchars()將標籤翻譯爲html實體,我將它們重新標記爲(p,br,strong)。

我的問題是:效率是否足夠高或者是否有其他更短或更有效的方法來實現此目標?如果你知道的話,可否請至少用關鍵字引導我?我可以在php.net和這個網站上看到他的詳細信息。

謝謝,關於任何更有效的自定義preg_replace函數的方法?

function safe_output_from_mysql($safe_echo_to_html) 
{ 
    $safe_echo_to_html = mb_convert_encoding($safe_echo_to_html, 'UTF-8', mb_detect_encoding($safe_echo_to_html)); 
    $safe_safe_echo_to_html = htmlspecialchars($safe_echo_to_html, ENT_QUOTES, "UTF-8"); 
    $safe_echo_to_html = preg_replace("&lt;br /&gt;","<br />",$safe_echo_to_html); 
    $safe_echo_to_html = preg_replace("&lt;p&gt;","<p>",$safe_echo_to_html); 
    $safe_echo_to_html = preg_replace("&lt;/p&gt;","</p>",$safe_echo_to_html); 
    $safe_echo_to_html = preg_replace("&lt;strong&gt;","<strong>",$safe_echo_to_html); 
    $safe_echo_to_html = preg_replace("&lt;/strong&gt;","</strong>",$safe_echo_to_html); 
    return $safe_echo_to_html; 
} 
+0

由於您沒有使用正則表達式,所以應該只使用'str_replace'。 – 2013-02-13 13:30:59

+0

@SeanBright謝謝 – 2013-02-13 14:02:37

回答

2

有沒有必要多次調用preg_replace()。您可以使用一個單一的模式來匹配所有需要的標籤:

preg_replace('/&lt;\s*(\/?(?:strong|p|br)\s*\/?)&gt;/i', '<\1>', $s); 

我假設,當然,你實際上計劃使用正則表達式做匹配。如果搜索字符串是直接文本,則strtr()更有效。

2

htmlspecialchars_decode:http://www.php.net/manual/en/function.htmlspecialchars-decode.php

此功能)的htmlspecialchars的相反(。它將特殊的HTML實體轉換回字符。

$str = "<p>this -&gt; &quot;</p>\n"; 

echo htmlspecialchars_decode($str); 

上例將輸出:

<p>this -> "</p> 
+0

感謝您的回答,但我故意沒有使用htmlspecialchars_decode函數;因爲:認爲一個壞的用戶輸入這段代碼到我的評論textarea <?php回聲「的情況我警告你。小心你的代碼。這是用php代碼打印的。「; ?>如果我解碼從我的MySQL的一切,那麼這意味着我已經開放給XSS攻擊,對吧?所以我不認爲我應該使用htmlspecialchars_decode函數。我從php.net中學到了逃避你需要的東西,並解碼你只需要再次使用的東西。請糾正我ıf我錯了。問候 – 2013-02-13 14:00:01

2

請參閱功能htmlspecialchars_decode($ STR);功能。

+0

感謝您的回答,但我故意沒有使用htmlspecialchars_decode函數;因爲:認爲一個壞的用戶輸入這段代碼到我的評論textarea <?php回聲「的情況我警告你。小心你的代碼。這是用php代碼打印的。「; ?>如果我解碼從我的MySQL的一切,那麼這意味着我已經開放給XSS攻擊,對吧?所以我不認爲我應該使用htmlspecialchars_decode函數。我從php.net中學到了逃避你需要的東西,並解碼你只需要再次使用的東西。請糾正我ıf我錯了。問候 – 2013-02-13 13:59:45