2011-09-19 86 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');