Не-латинские символы & ouch

Я познакомился с Cake PHP, который раскрыл общий вопрос о лучшей практике с точки зрения набора символов PHP / MySQL, на который я надеюсь получить ответ.

Моя (практическая) система содержит таблицу фильмов mysql. Этот список был получен из листа Excel, который был экспортирован как CSV, и импортирован через phpMyAdmin.

Я заметил, что названия с более «экзотическими» глифами имеют проблемы с отображением в браузере, например, «é in Amélie». Используя Cake или простой PHP, он отображает как ? , если он не трансформируется через htmlentities в a é , Ссылки со специальными символами вообще не отображаются.

Если я использую форму ввода Cake для входа в <alt>0233 , это отображается правильно в источнике, но как &Atilde;&copy; через htmlentities .

После быстрого поиска SO я решил, что UTF-8 может исправить все, поэтому я

  • изменили исходный код PHP и кодировку файлов CSV на UTF-8
  • убедитесь, что там был материал <meta> (он уже был по умолчанию по умолчанию Cake).
  • убедитесь, что мои браузеры считают, что документ UTF-8 (они делают)
  • изменил настройку базы данных MySQL на utf-8 general_ci (как образованный удар из доступных параметров UTF-8)
  • удалены и реимпортированы мои данные

Тем не менее, я все еще застрял. Я отмечаю, что phpMyAdmin удается отображать символы «правильно» в исходном HTML-файле при просмотре записей.

Я чувствую, что кодировка документа виновата, однако мне интересно, может ли кто-нибудь дать лучший ответ:

  • каков наилучший способ перемещения моих данных из Excel в MySQL для сохранения глифов?
  • Каковы оптимальные настройки для моих таблиц?
  • Я бы предпочел использовать UTF-8, чтобы изначально отображать подобные é, что я могу сделать в Cake, чтобы избежать множества вызовов для подобных htmlentities, т. Е. Есть ли настройка конфигурации или способ, с помощью которого я устанавливал содержимое, что делает это более и позволяет Cake родным помощникам, таким как Html->link работать?

Некоторый код, на всякий случай:

видеоролик.

 function index() { $this->set('movies' , $this->Movie->find('all')); } 

index.ctp просмотреть выдержку

 <?php foreach ($movies as $movie): ?> <tr> <td><?php echo $movie['Movie']['id']; ?></td> <td><?php echo htmlentities($movie['Movie']['title']); ?> <td><?php echo $this->Html->link($movie['Movie']['title'] , array('controller' => 'movies' , 'action' => 'view' , $movie['Movie']['id'])); ?> </td> <td><?php echo $this->Html->link("Edit", array('action' => 'edit' , $movie['Movie']['id'])); ?> </td> <td> <?php echo $this->Html->link('Delete', array('action' => 'delete', $movie['Movie']['id']), null, 'Are you sure?')?> </td> </tr> <?php endforeach; ?> 

Заранее благодарим за любую помощь / советы.

Убедитесь, что соединение MySQL установлено на UTF-8 при импорте данных. Сортировка используется только для сортировки и сравнения, а не для сохранения данных.

Вы можете установить кодировку соединения с помощью SET NAMES 'utf-8'; в начале вашего файла SQL.

Этот вопрос часто возникает здесь.

UTF8 должен работать. Убедись, что:

  1. В вашей сортировке базы данных используется utf8 (utf8 bin general)

  2. Тег html document encoding установлен на utf8

  3. И ОЧЕНЬ ВАЖНО – большинство людей забывают этот бит – убедитесь, что все исходные файлы сохранены как utf8. Используйте блокнот ++ на ПК или Coda / TextMate / TextWrangler на Mac, чтобы убедиться, что кодировка верна. Если вы этого не сделаете, может произойти трансформация / повторная интерпретация символов

EDIT : И забудьте о htmlentities, вам не нужно, если вы используете кодировку utf8 на всем протяжении