2011-12-02 96 views
0

我有一個字符串,其中包含特殊字母,如「á」和htmlcode,如「<input type='text' />」。當我在DB中存儲這個字符串時,我使用:htmlentities($string, ENT_QUOTES);。 問題是當我輸出文本時,我使用了html_entity_decode($string_from_db, ENT_QUOTES)以及我在數據庫中使用的所有實體,如字母「&aacute;」和「<input type='text' title="LA1&qu...」以獲得轉換後的htmlcode。所以我的輸出將顯示「á」字母和一個不正常的文本字段。我希望這封信是這樣的,但是對於我想要顯示代碼「<input type='text' />」的字段而不是實際字段。如何解碼除html實體外的所有實體

我需要這個多語言網站用戶輸入很多,所以我需要能夠正確處理特殊字母,但也保護不良輸入。任何建議都非常令人滿意。

回答

0

好吧,看來我明白了......至少現在。下面是我在做什麼:

  1. 用戶提交我清理它的文字:

    function sanitize_form_input($string) { 
        $string = mysql_real_escape_string($string); 
        return $string; 
    } 
    
  2. 了頁面編碼,PHP編碼,HTML編碼,MySQL的編碼...任何編碼設置爲UTF-8的其他可能的事情。

  3. 輸出與文本:

    function sanitize_db_output($string) { 
        return htmlentities(stripslashes($string), ENT_QUOTES, 'UTF-8'); 
    } 
    

請讓我知道這是一個錯誤的方式來做到這一點。

+0

你爲什麼要做stripslashes?您的代碼是否也會將所有角色顯示爲實體,如您所說,您不希望對我的回答發表評論?我認爲我的答案的更新應該適合你... – codeling

0

您可以在html_entity_decode後再做htmlspecialchars;該功能將僅轉換其在HTML中具有特殊的功能,他們的實體中的字符:

htmlspecialchars(html_entity_decode($string_from_db, ENT_QUOTES), ENT_QUOTES) 

這應該照顧的是,得到的字符串沒有未編碼的HTML字符。當然,性能方面,這可能不是最好的解決方案,但很簡單!

+0

這不會幫助我,因爲它也會轉換字母:| –

+0

對不起,本來打算使用'htmlspecialchars' ... – codeling