Не латинские иероглифы - PullRequest
2 голосов
/ 10 мая 2011

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

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

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

Если я использую форму ввода 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; ?>

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

Ответы [ 2 ]

3 голосов
/ 10 мая 2011

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

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

1 голос
/ 10 мая 2011

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

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

  1. При сопоставлении базы данных используется utf8 (общее описание utf8 bin)

  2. Ваш HTML код тега документа имеет значение utf8

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

РЕДАКТИРОВАТЬ : И забудьте о htmlentities, вам это не нужно, если вы все время используете кодировку utf8

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