Проблемы с отображением символов с французским акцентом в UTF-8 - PullRequest
8 голосов
/ 28 июня 2010

Я работаю над сайтом на французском языке, созданным в CakePHP.Я пробовал несколько функций, чтобы попытаться преобразовать текст в UTF-8 и правильно отобразить его, но пока безуспешно - любые буквы с акцентом отображаются в виде черного ромба с вопросительным знаком.Они отображаются правильно, когда я изменяю набор символов в браузере на ISO-8859-1, но я бы хотел, чтобы сайт в то время соответствовал UTF-8.Я использовал:

html_entity_decode ($ string, ENT_QUOTES, 'UTF-8');htmlspecialchars ($ string, ENT_QUOTES, 'UTF-8');utf8_encode

но без сигары.Страница имеет заголовок UTF-8 в заголовке

И база данных MySQL тоже использует UTF-8.Как заставить акцентированные символы правильно отображаться в UTF-8?

Ответы [ 4 ]

9 голосов
/ 28 июня 2010

Проверьте свой @@character_set_results.По умолчанию MySQL использует latin1, а не utf8.Попробуйте SET NAMES utf8 или mysqli :: set_charset .

Обновление: вот как можно проверить используемые наборы символов:

mysql> SHOW VARIABLES LIKE '%char%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       | 
| character_set_connection | utf8                       | 
| character_set_database   | utf8                       | 
| character_set_filesystem | binary                     | 
| character_set_results    | utf8                       | 
| character_set_server     | utf8                       | 
| character_set_system     | utf8                       | 
| character_sets_dir       | /usr/share/mysql/charsets/ | 
+--------------------------+----------------------------+

Подробнее о dev.mysql.com .

5 голосов
/ 28 июня 2010

Первый: Проверьте кодировку php файлов!Я работаю на Mac, я использую Coda для программирования, и у него есть возможность конвертировать кодировки, иногда у меня возникают подобные проблемы, и преобразование в UTF-8 всегда исправляет их.Я думаю, что Notepad ++ может сделать это на Windows.(Если вы сделаете это с вашими файлами PHP, для каждой строки в них не понадобятся функции htmlspecialchars(), html_entity_decode и т. Д.)

Секунда: , если вы используете вывод HTML,проверьте, есть ли в заголовке <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> ...

В-третьих: Сделайте то, что сказал @janmoesen в вашей базе данных MySQL.

Расскажите мне что-нибудь об этом.

3 голосов
/ 12 ноября 2014

Я только что исправил очень похожую проблему с отображением акцентированных символов. Моя таблица базы данных имеет кодировку utf-8, а мой HTML-заголовок правильно настроен для utf-8.

Я не указал кодировку для моего подключения MySQL, в моем случае я использую PDO.

$this->pdo = new PDO("mysql:host=$host;dbname=$dbname;charset=utf8;", $username, $password);

Теперь никаких проблем!

1 голос
/ 11 сентября 2018

В случае, если это помогает любому, использующему классы PHP.

Моим решением было установить кодировку символов для моего соединения.

//connect to MySQL and select DB
public function open_connection() {
    $this->connection = new mysqli( DB_SERVER, DB_USER, DB_PASS, DB_NAME );
    if ( !$this->connection ) {
        die( "Database connection failed: " . mysqli_error() );
    }
    mysqli_set_charset($this->connection,"utf8");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...