Я познакомился с Cake PHP, который раскрыл общий вопрос о лучшей практике с точки зрения набора символов PHP / MySQL, на который я надеюсь получить ответ.
Моя (практическая) система содержит таблицу фильмов mysql. Этот список был получен из листа Excel, который был экспортирован как CSV, и импортирован через phpMyAdmin.
Я заметил, что названия с более «экзотическими» глифами имеют проблемы с отображением в браузере, например, «é in Amélie». Используя Cake или простой PHP, он отображает как ?
, если он не трансформируется через htmlentities
в a é
, Ссылки со специальными символами вообще не отображаются.
Если я использую форму ввода Cake для входа в <alt>0233
, это отображается правильно в источнике, но как é
через htmlentities
.
После быстрого поиска SO я решил, что UTF-8 может исправить все, поэтому я
<meta>
(он уже был по умолчанию по умолчанию Cake). Тем не менее, я все еще застрял. Я отмечаю, что phpMyAdmin удается отображать символы «правильно» в исходном HTML-файле при просмотре записей.
Я чувствую, что кодировка документа виновата, однако мне интересно, может ли кто-нибудь дать лучший ответ:
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 должен работать. Убедись, что:
В вашей сортировке базы данных используется utf8 (utf8 bin general)
Тег html document encoding установлен на utf8
И ОЧЕНЬ ВАЖНО – большинство людей забывают этот бит – убедитесь, что все исходные файлы сохранены как utf8. Используйте блокнот ++ на ПК или Coda / TextMate / TextWrangler на Mac, чтобы убедиться, что кодировка верна. Если вы этого не сделаете, может произойти трансформация / повторная интерпретация символов
EDIT : И забудьте о htmlentities, вам не нужно, если вы используете кодировку utf8 на всем протяжении