Я получил немного varchar
поля в моей базе данных MySQL, содержащие датские буквы (æ, ø, å). При просмотре базы данных с PHPMyAdmin, буквы отображаются правильно, однако, когда я получаю поле с помощью запроса и пытаюсь отобразить поле, они меняются («ø» становится «Ã¸»). Я попытался изменить параметры сортировки на latin1 и utf-8 (обе датские версии), но безуспешно. Я даже не могу понять, является ли проблема базой данных или моим кодом. Кто-нибудь, кто видел это раньше?
Изменить: я добавляю код для чтения и отображения содержимого базы данных. Проблема подтверждена в «users_last_name» и «address_street», но, вероятно, присутствует повсюду (в настоящее время это единственные поля с датскими буквами).
Код:
<?php
// Query to load information on projects
$main_query = $this->db->query('SELECT project_id, project_name, project_image_src, project_owner FROM ed_projects');
foreach ($main_query->result() as $row) {
// Get adress of the current project in the "foreach" loop
$project_id = $row->project_id;
$address_query = $this->db->query("SELECT * FROM ed_project_address WHERE project_id='$project_id'");
$address_row = $address_query->row();
// Get the name of the user who owns the current project
$user_id = $row->project_owner;
$user_query = $this->db->query("SELECT users_first_name, users_last_name FROM ed_users WHERE id='$user_id'");
$user_row = $user_query->row();
?>
<div class="projectAvatar">
<?php if ($row->project_image_src) {
echo "<img src=".$row->project_image_src.">";
} else {
echo "NoImg";
}
?>
</div>
<div class="projectInformation">
<?php echo $row->project_name; ?> <br />
<?php echo $address_row->address_street." ".$address_row->address_number; ?> <br />
<?php echo $user_row->users_first_name." ".$user_row->users_last_name; ?> <br />
</div>
<?php
}
Если что-то работает в phpMyAdmin, но не на ваших собственных веб-страницах, это может быть проблемой с кодировкой символов ваших веб-страниц. Предполагая, что вы используете тип документа HTML5, попробуйте просто добавить:
<meta charset="utf-8">
к <HEAD>
раздел вашего сайта.
Исходя из ваших комментариев и кода, кажется, что вы успешно храните свои датские символы, используя кодировку UTF-8 в своей базе данных. (Настройка параметров сортировки таблицы на это не повлияет; параметры сортировки определяют порядок сортировки и сравнения, но не фактический набор символов, используемый для хранения.) Чтобы символы правильно отображались на веб-странице, необходимо указать браузеру, какую кодировку символов вы используете. использовать для вашей страницы; добавив <meta charset...>
заголовок делает это. Веб-страницы phpMyAdmin почти наверняка будут использовать UTF-8 в качестве своего набора символов, поэтому, если это работает, вы должны изменить свои страницы, чтобы соответствовать ему.
Как я уже упоминал, я чувствую, что, безусловно, лучшее полное объяснение того, как все это работает, дано в книге Джоэла Спольски. Абсолютный минимум Каждый разработчик программного обеспечения должен абсолютно точно знать о юникоде и наборах символов (никаких оправданий!), который расскажет вам о том, как этот материал должен быть сделан во всех его мрачных деталях.
попробуйте этот ANSI (Windows-1252).
читать из