我实际上是在使用zend框架编写php的web应用程序。我需要翻译法语和英语的每一页,所以我使用csv文件来做它。
我的问题是当一个单词以一个重音字母如É或À开头时,这个字母就消失了,但单词的其余部分显示出来。
例如,我的csv文件中包含Écriture
,则显示criture
。但如果我有exécution
,它显示exécution
没有任何问题。
每当我想在我的视图中显示文本时,我只需调用<?php echo $this->translate('line to call in csv'); ?>
,我的文本就会显示出来。
就像我说的,我的应用程序是用UTF-8编码的,我对特殊字符没有任何问题,除非它们是第一个。我用谷歌搜索了一下,但现在什么也找不到。
谢谢你的帮助!
我忘了说,当我在zend浏览器中执行我的应用程序来调试它时,一切都很好,我的É显示。只有在IE或FF这样的浏览器中我才会遇到这个问题。
UPDATE #2
我刚刚发现了另一篇关于fgetcsv的文章,看起来我用来从我的csv文件翻译的函数是使用fgetcsv()…这是问题所在吗?如果是,我该怎么解决?它是在Zend翻译库中编码的,我不确定我想要开始改变那里的东西…
更新# 3
我继续我的研究,我发现PHP编码UTF-8时的问题。但是Zend框架默认情况下是UTF-8编码的,所以我确信有一种方法可以使这个工作。我还在寻找,但我希望有人有解决方案!
我有同样的问题,我尝试了AJ的解决方案,它工作:csv
字段中缺少第一个字符问题似乎是fgetcsv()使用区域设置,只需使用setlocale(LC_ALL, 'en_US.UTF-8');
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
使用十六进制编辑器查看CSV文件,并确保以正确的方式编码
"É"为0xC3 0x89
,"À"是0xC3 0x80
您的代码中是否有一些strtoupper()
或ucfirst()
或类似的函数?在这种情况下,尝试mb_strtoupper($str, 'UTF-8')