第一个字母如果有重音则会消失(CSV文件,UTF-8编码)

时间:2011-10-17 18:57:55

标签: php zend-framework csv utf-8

我实际上正在使用zend框架编写一个用PHP编码的Web应用程序。我需要翻译法语和英语的每个页面,所以我使用csv文件来完成它。

我的问题是,当一个单词以É或À等重音字母开头时,该字母就会消失,但会显示该单词的其余部分。

例如,如果我的csv文件包含Écriture,则会显示criture。但是,如果我有exécution,则显示exécution没有任何问题。

每次我想在视图中显示文字时,我只需拨打<?php echo $this->translate('line to call in csv'); ?>即可显示我的文字。

就像我说的那样,我的应用程序是用UTF-8编码的,我对特殊字符没有任何问题,除非它们是第一个。我用Google搜索了,但现在找不到任何东西。

非常感谢您的帮助!

更新

我忘了说当我在zend浏览器中执行我的应用程序来调试它时,一切都很好,我的É显示。只有在像IE或FF这样的浏览器中我才有问题。

更新#2

我刚刚发现另一篇关于fgetcsv的帖子,看起来我用来翻译我的csv文件的函数是使用fgetcsv()...这可能是问题吗?如果是,我该如何解决?它的编码与Zend Translate库中的编码一样,我不确定我是否想要在那里开始改变...

更新#3

我继续我的研究,在编码UTF-8时我在PHP中发现了问题。但是Zend Framework默认编码为UTF-8,所以我确信有一种方法可以使这个工作。我还在寻找,但我希望有人有解决方案!

4 个答案:

答案 0 :(得分:5)

我有同样的问题,我尝试了AJ的解决方案并且它有效: Missing first character of fields in csv

问题似乎是fgetcsv()使用区域设置,只需使用

setlocale(LC_ALL, 'en_US.UTF-8');

答案 1 :(得分:1)

In .csv file content try to use
; as delimiter 
  and 
" as enclosure.
something like this inside .csv file

“key1”;“value1”## first line

“key1”;“value1”## second line

“key1”;“value1”## fird line

这解决了我的问题

答案 2 :(得分:0)

使用十六进制编辑器查看csv文件并确保以正确的方式编码

“É”是0xC3 0x89, “À”是0xC3 0x80

答案 3 :(得分:0)

您的代码中是否有strtoupper()ucfirst()或类似功能?在这种情况下,请尝试mb_strtoupper($str, 'UTF-8')