简体   繁体   中英

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

I'm actually working on a web application coded in php with zend framework. I need to translate every pages in french and english so I use csv file to do it.

My problem is when a word start with an accentued letter like É or À, the letter just disappear, but the rest of the word is displayed.

For example, if my csv file contains Écriture , it displays criture . But if I have exécution , it displays exécution without any problems.

Everytime I want to display text in my view, I just call <?php echo $this->translate('line to call in csv'); ?> <?php echo $this->translate('line to call in csv'); ?> and my text is displayed.

Like I said ,my application is encoded with UTF-8, and I don't have any problems withs specials characters, except when they're first. I googled it but couldn't find anything for now.

Thanks already for your help !

UPDATE

I forgot to say that when I execute my application in zend browser to debug it, everything's fine, my É displays. It's only in broswers like IE or FF that I have the problem.

UPDATE #2

I just found another post talking about fgetcsv, and it looks like the function I use to translate from my csv file is using fgetcsv() ... could it be the problem ? And if it is, how can I fix it ? It's coded like that in Zend Translate library I'm not sure I want to start changing things there ...

UPDATE #3

I continued my research and I found issues in PHP when encoded UTF-8. But Zend Framework is encoded UTF-8 by default so I'm sure there is a way to make this work.. I'm still searching but I hope someone has the solution !

I had the same problem, I tried AJ's solution and it worked: Missing first character of fields in csv

The problem seems to be that fgetcsv() uses locale settings, just use

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

this solve like ussue for me

view csv file using hex editor and make sure it is encoded in the right way

"É" is 0xC3 0x89 , "À" is 0xC3 0x80

Did you have some strtoupper() or ucfirst() or similar functions in your code? In that case try mb_strtoupper($str, 'UTF-8')

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM