2012-02-11 76 views
1

我的问题是这样的:函数utf8_encode不会产生正确的结果

我存储阵列,其中有像“E”,“F”等。在某些时候,钥匙,我得的值键。这很好。但是,如果我想存储“í”,“é”等作为键,它不会产生正确的结果(结果见 )。我的页面必须使用UTF-8格式。查找问题,我发现utf8_encode应该可以帮助我解决问题。它并没有:虽然它产生了更易读的字符,但它与我想要的完全不同。如果重要,phpinfo给出:

Directive Local Value Master Value 
iconv.input_encoding ISO-8859-1 ISO-8859-1 
iconv.internal_encoding ISO-8859-1 ISO-8859-1 
iconv.output_encoding ISO-8859-1 ISO-8859-1 

什么可以帮助解决这个问题?

编辑:我认为,数组键使一些数据丢失。这是真的吗?如果是,如何预防?

编辑2:我到目前为止试过的解决方案:获取数组键值 - 失败;用相同的键创建一个数组,但是utf-8字符的值:失败; utf8_encode失败; [试用了两个] iconv_set_encoding:失败; ini_set失败; mb_internal_encoding失败。所有返回与Ã或 。

+0

您的输出可能是'ISO-8859-1'根据这些设定编码。这与'utf8_encode'完全无关。与您的浏览器一起检查适用的编码。 – hakre 2012-02-11 16:19:09

+0

是的,输出似乎是ISO-8859-1。我如何解决这个问题,而不编辑php.ini? – axiomer 2012-02-11 16:35:44

+0

发送了一个表示该信号的标题。禁用iconv输出编码,如果你不知道那是什么,你将不需要它。检查PHP手册如何在运行时改变它。祝你好运! – hakre 2012-02-11 17:18:30

回答

1

我收集了一些解决方案,并最终它的工作原理。

我做什么是以下几点:首先 ,我已经把与添加该行的所有解决方案:

ini_set('default_charset', 'UTF-8'); 
iconv_set_encoding("input_encoding", "UTF-8"); 
iconv_set_encoding("internal_encoding", "UTF-8"); 
iconv_set_encoding("output_encoding", "UTF-8"); 
mb_internal_encoding("UTF-8"); 

这没有奏效。

我看了所有的环节,函数utf8_encode - utf8_decode方法不起作用。然后我看了一下函数,发现了mbstring,所以我用它的mbstring替代了每个字符串函数。

这工作得很好。然后,我发现mb_internal_encoding("UTF-8");就够了。所以现在它工作。感谢所有的建议!

+2

所以基本上你是通过操纵编码 - 不知道字符串函数来摧毁你的字符串吗? – deceze 2012-02-12 10:15:30

+0

看起来,是的。有趣的是,以前它没有破坏也许是因为这并不在本地主机,但在另一台服务器上运行 – axiomer 2012-02-12 10:33:05

+0

值得一读:。http://kunststube.net/encoding/(PHP的好节,加上跟随链接对于Joel的文章) – cmbuckley 2012-02-12 14:52:11

0

尝试所有脚本的顶部是必须处理使用UTF-8的数据加入这一行:

mb_internal_encoding( “UTF-8”);

,甚至更好,编辑你的php.ini文件中的内部编码。

+0

我无法编辑php.ini(共享主机)。 :(另外,这似乎不工作,输出仍然是012 – axiomer 2012-02-11 16:23:37

0

尝试设置default_charset指令:

ini_set('default_charset', 'UTF-8'); 

这设置其被发送到浏览器在Content-Type头中的字符编码。

+0

看起来没有工作:( – axiomer 2012-02-12 06:12:13

相关问题