Первая буква исчезнет, ​​если у нее будет ударение (файл CSV, кодированный в UTF-8) - PullRequest
3 голосов
/ 17 октября 2011

На самом деле я работаю над веб-приложением, написанным на php с Zend Framework. Мне нужно перевести все страницы на французский и английский, поэтому для этого я использую CSV-файл.

Моя проблема в том, что когда слово начинается с акцентированной буквы, такой как É или À, буква просто исчезает, но отображается остальная часть слова.

Например, если мой CSV-файл содержит Écriture, он отображает criture. Но если у меня exécution, он отображает exécution без проблем.

Каждый раз, когда я хочу отобразить текст в своем виде, я просто звоню <?php echo $this->translate('line to call in csv'); ?>, и мой текст отображается.

Как я уже сказал, мое приложение кодируется с помощью UTF-8, и у меня нет проблем со специальными символами, кроме случаев, когда они появляются первыми. Я погуглил, но пока ничего не нашел.

Спасибо, уже за вашу помощь!

UPDATE

Я забыл сказать, что когда я запускаю свое приложение в браузере Zend для его отладки, все в порядке, отображается мой É. Только у таких брошировок, как IE или FF, у меня проблема.

ОБНОВЛЕНИЕ № 2

Я только что нашел другой пост, рассказывающий о fgetcsv, и похоже, что функция, которую я использую для перевода из моего csv-файла, использует fgetcsv () ... это может быть проблемой? И если это так, как я могу это исправить? Это кодируется в библиотеке Zend Translate. Я не уверен, что хочу что-то там менять ...

ОБНОВЛЕНИЕ № 3

Я продолжил свои исследования и обнаружил проблемы в PHP при кодировании UTF-8. Но Zend Framework по умолчанию закодирован в UTF-8, поэтому я уверен, что есть способ сделать это ... Я все еще ищу, но надеюсь, что у кого-то есть решение!

Ответы [ 4 ]

5 голосов
/ 25 октября 2011

У меня была такая же проблема, я попробовал решение AJ, и оно сработало: Отсутствует первый символ полей в csv

Проблема заключается в том, что fgetcsv () использует настройки локали, простоиспользуйте

setlocale(LC_ALL, 'en_US.UTF-8');
1 голос
/ 04 января 2014
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

это решает, как обычно для меня

0 голосов
/ 17 октября 2011

Были ли в вашем коде некоторые strtoupper() или ucfirst() или подобные функции? В этом случае попробуйте mb_strtoupper($str, 'UTF-8')

0 голосов
/ 17 октября 2011

просмотреть CSV-файл с помощью шестнадцатеричного редактора и убедитесь, что он правильно закодирован

"É" равно 0xC3 0x89, "А" равно 0xC3 0x80

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...