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


First letter disappear if it has an accent (CSV file, UTF-8 encoded)

我实际上是在使用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')