2011-09-19 82 views
0

我有一個表,其中我有一個utf8_unicode_ci格式的文本列。php utf8文本無法正確呈現

我也有一種形式,我可以把多語言文本放入此字段。

當我取這個專欄中,我想只顯示50字符長每個文本,所以我下面的:

$text = $rows["text"]; 
$text = mb_substr($text, 0, 50); 
$text = htmlentities($text, ENT_COMPAT, 'UTF-8'); 

這無法呈現非英文字符和犯規顯示任何東西,如果我把mb_substr功能低於htmlentities它會顯示,但它會切斷文本並顯示一些&字母;&另一個;

任何方式,我可以解決這個問題?

+1

什麼*確切*輸出的樣子?爲什麼你首先使用'htmlentities()'? –

+0

由於xss代碼,我需要使用htmlentities。例如,如果我輸入一些樣本文本,例如:「σσσσσσσσσσσσσσσσσσσ」它不會顯示任何內容,因爲它會破壞...如果我刪除htmlentities它將顯示如下:「如果我刪除substr和離開htmlentities它會正常工作,但我需要限制的字符數量爲50. – fxuser

+0

'htmlspecialchars()'足以阻止XSS,不需要將每個字符變成實體 –

回答

1

您可以使用mb_internal_encoding將字符編碼更改爲UTF-8,這可能會解決它。

mb_internal_encoding('UTF-8'); 
+0

以及要刪除的內容或準確地放置此代碼的位置? – fxuser

+0

我把它放到了我的配置文件中,它被加載到每個文件中,它似乎解決了這個問題,謝謝。 – fxuser

0

如果你在MySQL 5.0.7 <:

啓用UTF-8,而使用 的mysql_query查詢( 「集名稱的utf8;」);

如果你是一個較新的MySQL:

mysql_set_charset( 「UTF-8」);

AND

報頭( '內容類型:文本/無格式;字符集= UTF-8');