2016-01-23 7 views
0

У меня есть текст в базе данных. Я использую французский и английский. У французов есть акценты, а некоторые специальные символы, такие как ç. Я использую Mamp, MySQL и PHP.Сохранение и вывод текста с акцентами

У меня есть сортировка latin1_swedish-ci (по умолчанию). Я пробовал utf8_general_ci, и результат тот же. Если я использую на странице html, у меня это в голове: <meta charset="UTF-8">

Например, в базе данных у меня есть «вуаля».

Когда эхо текст из базы данных в HTML:

$con = mysqli_connect("localhost","root","root"); 
if (!$con) { 
    die('The connexion failed: ' . mysqli_error()); 
} 

if (!mysqli_select_db($con, 'prova')){ 
    echo "Connection with database was not possible"; 
} 


$result = mysqli_query($con, "SELECT * FROM test1 
           WHERE id='1' ") 
or die(mysqli_error()); 
while($row = mysqli_fetch_array($result)) { 

    $text = $row['first']; 
    echo $text; //I see: voil� 
    echo htmlentities($text); //I see nothing 
    echo utf8_encode($text); //This works: I see voilà 
} 
  1. Почему htmlentities не работает?
  2. Есть utf8_encode(); путь? Я должен использовать это всегда, когда я выводю что-то из базы данных? Почему я должен использовать это, если сортировка уже UTF8? Есть ли лучший способ хранить и выводить текст с акцентами в базе данных MySQL?
+0

Возможной дубликаты [Получение специальных символов из базы данных MySQL с PHP] (http://stackoverflow.com/questions/15892610/getting-special-characters-out-of-a-mysql-database-with-php) – ItsGreg

+0

@ItsGreg. другой не отвечает на мои вопросы. Я пришел к аналогичному решению, но вопрос в том, почему – Nrc

+0

'htmlentities()' не должен возвращать ничего, если ваша строка 'voilà'. Как выглядит поле в phpMyAdmin? – rybo111

ответ

0

После подключения к БД необходимо установить клиентскую кодировку на UTF8:

mysqli_set_charset($con, "UTF8"); 

В противном случае клиент MySQL преобразует utf8 «вуаля» в latin1 (потому что кажется, что это это по умолчанию) ,

Либо вы говорите клиенту, что я хочу все в UTF8, или вы получите его с latin1 по умолчанию, и преобразовать его один за другим сам вызов utf8_encose ($ текст)

 Смежные вопросы

  • Нет связанных вопросов^_^