Я знакомлюсь с Cake PHP, который раскрыл общий вопрос о наилучшей практике с точки зрения набора символов PHP / MySQL, на который, я надеюсь, можно ответить здесь.
Моя (тренировочная) система содержит таблицу фильмов mysql. Этот список был получен из листа Excel, который был экспортирован как CSV и импортирован через phpMyAdmin.
Я заметил, что названия с более «экзотическими» глифами имеют проблемы с рендерингом в браузере, например, The é в Amélie. Используя Cake или обычный PHP, он рендерится как ?
, если не преобразован через htmlentities
в é
. Ссылки со специальными символами вообще не отображаются.
Если я использую форму ввода Cake для ввода <alt>0233
, это правильно отображается в источнике, но как é
через 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; ?>
Заранее спасибо за любую помощь / советы.