utf8_encode无法产生正确的结果

时间:2012-02-11 16:11:36

标签: php utf-8 character-encoding array-key

我的问题如下:

我存储了一个数组,其中包含“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

有什么可以解决这个问题?

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

Edit2:我到目前为止尝试过的解决方案:获取数组键值 - 失败;使用相同的键创建一个数组,但值为utf-8个字符:failed; utf8_encode失败; [试过两个] iconv_set_encoding:失败; ini_set失败了; mb_internal_encoding失败了。全部以Ã或returned返回。

3 个答案:

答案 0 :(得分: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");已经足够了。所以现在它有效。感谢您的所有建议!

答案 1 :(得分:0)

尝试在所有必须处理UTF-8数据的脚本的顶部添加此行:

mb_internal_encoding( “UTF-8”);

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

答案 2 :(得分:0)

尝试设置default_charset指令:

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

这将设置在Content-Type标题中发送到浏览器的字符编码。