2011-03-14 138 views
2

在一个单独的文件阳明海运后我有:
flags: [<img src="/images/cms_bo/icons/english.png" alt="English"/>]奇怪的字符()出现做html_entity_decode

当我打电话到这一点我的代码,它没有解释,所以我用html_entity_decode

它的工作原理,但我只有1怪字符之前我的形象

<?php echo html_entity_decode($form['lang']->render()); ?> 

我所有的文件都UTF8编码。你有什么想法解决这个问题吗?

PS:

 public static function getI18nCulturesForChoice() 
    { 
     return array_combine(self::getI18nCultures(), self::getI18nCulturesFlags()); 
    } 
+2

显示一些相关的代码将有助于 – 2011-03-14 16:12:34

+0

的问题还不是很清楚。为什么你首先使用'html_entity_decode'?您的描述中没有实体。 – Jon 2011-03-14 16:14:11

+0

@jon @shakti因为否则我的代码不解释。它不会显示图像,只是English(只是字符串) – 2011-03-14 16:21:47

回答

10

尝试使用html_entity_decode($form['lang']->render(),ENT_QUOTES, "UTF-8");

+1

谢谢你终于修好了;-) – 2011-03-15 09:43:03

0

也许你的文件有一个字节顺序标记(BOM)集。

+0

我不这么认为,因为没有html_entity_decode,它会输出字符串,因为它确实是。没有奇怪的字符 – 2011-03-14 16:27:19

+0

,我使用textmate :(默认情况下在Mac的Textmate,它创建没有任何BOM标记的UTF-8文件。) – 2011-03-14 16:28:11

1

到PHP 5.3.3之前,默认字符集为html_entity_decodeISO-8859-1!如果你使用UTF-8,你需要使用函数的第三个参数来告诉它处理UTF-8而不是假定ISO-8859-1。

这是盲目地假设您使用的是旧版本的PHP。

如果使用PHP的新版本,你,可以考虑使用iconv//IGNORE//TRANSLIT标志尝试和之前删除任何坏UTF-8序列通过串入html_entity_decode

+0

@Charles Unfortunalty,这是一个很好的领导,但我使用PHP 5.3.3: '( – 2011-03-14 16:39:31

+0

我悄悄地编辑了我的帖子来处理这种可能性, 是“我无法表示那个角色”字形,所以很明显某些东西正在丢失某处... – Charles 2011-03-14 16:41:21

+0

仍然不是:'(,(<?php echo html_entity_decode(iconv('UTF-8','// IGNORE // TRANSLIT',$ form ['lang'] - > render()));?>) – 2011-03-14 16:57:16