2009-01-28 13 views
2
方法

好了,有一噸的東西在那裏的消毒字符串,但是很少,我能找到,在最好的方法準備用戶輸入(就像我現在輸入的內容一樣)插入內容管理系統,然後如何過濾出來。最佳前處理和後處理多語言用戶輸入一個PHP/MySQL的CMS

我建設兩個多語種(日語,英語+其他羅曼語)的CMS,並具有與得到兩個特殊字符,如®時間赫克,™,與日文字符顯示屏。

我繼續得到非常不一致的結果。

我把一切都設置爲UTF-8:

網頁:和

.htaccess文件:AddDefaultCharset UTF-8,(給力的問題)

每個數據庫連接後:請求mysql_query (「SET NAMES'UTF8'」);

每個數據庫,表,字段也設置爲utf8_general_ci

魔術引號關閉。我第一個用戶進行預處理與輸入的htmlpurifier的缺省設置,然後我在其上運行該功能:

function html_encode($var) { 

     // Encodes HTML safely for UTF-8. Use instead of htmlentities. 
     $var = htmlentities($var, ENT_QUOTES, 'UTF-8'); 

     // convert pesky special characters to unicode 
     $look = array('™', '™','®','®'); 
     $safe = array('™', '™', '®', '®'); 

     $var = str_replace($look, $safe, $var); 

     $var = mysql_real_escape_string($var); 

     return $var; 
          } 

那得到的它到數據庫。

我用這個功能過濾一切從數據庫返回它:

function decodeit($var) { 

     return html_entity_decode(stripcslashes($var), ENT_QUOTES, 'UTF-8'); 
          } 

不幸的是,這一切後我仍然得到不一致的結果。大多數情況下,®符號變成小鑽石。

我已經找遍了上一個很好的嘖嘖,但似乎無法找到什麼是最好的方法......

回答

1

對不起網頁標題得到了由所見即所得的編輯器擦洗。爲了清楚起見:

網頁標題是:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

而且

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
0

所有內容都已經編碼爲utf8。解碼爲ISO-8859-1只會破壞任何日語。

0

我曾經遇到過一個編碼問題,它涉及到php文件本身的編碼。所以基本上確保文件本身編碼爲utf-8。在VIM,你可以做 :電子++ ENC =

+0

文本被爭吵。它是:e ++ enc = utf-8 – Sofia 2009-01-31 04:55:31

1

不要把ヶ輛在你的數據庫!切勿調用html_entities(),它應該從PHP中棄用。使用htmlspecialchars但在顯示文本時,不要在將其放入數據庫之前。重點是防止您的數據被視爲HTML。翻譯商標符號或版權符號沒有意義,因爲它們不會造成風險。您需要擔心的唯一html是:> < &'「