我实际上正在使用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,所以我确信有一种方法可以使这个工作。我还在寻找,但我希望有人有解决方案!
答案 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
first line
second line
fird line
这解决了我的问题
答案 2 :(得分:0)
使用十六进制编辑器查看csv文件并确保以正确的方式编码
“É”是0xC3 0x89
,
“À”是0xC3 0x80
答案 3 :(得分:0)
您的代码中是否有strtoupper()
或ucfirst()
或类似功能?在这种情况下,请尝试mb_strtoupper($str, 'UTF-8')