2015-11-25 6 views
2

Как я могу отбросить текстовое поле sql в абзац?Очень странное поведение с UTF-8

В мой код помещается текст, но изменяется акцент, например á на это ->. Я попытался добавить UTF-8 в заголовок и удалить его.

Удаление UTF-A делает содержимое sql в порядке, но весь контент за пределами абзаца испортится.

Я проверил DB использовал (UTF-8 Unicode), файлы были сохранены с UTF-8

Любые идеи о том, что может быть не так?

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 

<textarea class="texto" name="textoarticulo" id="textoarticulo" form="formarticulo" placeholder="Texto del art&iacute;culo..."> 
<? 
    echo $row['txt4']; 

?> 
</textarea> 
+0

Что вы подразумеваете под акцентами? что это за персонаж? – Whitecat

+0

á <- a с акцентом –

+0

См. «Черные бриллианты» в http://stackoverflow.com/questions/38363566/trouble-with-utf8-characters-what-i-see-is-not-what-i-stored , –

ответ

4

Очень важно, что ваш всего код имеет ту же кодировку, чтобы избежать проблем, где символы отображают неправильно.

Вот небольшой список вещей, которые нужно установить для определенной кодировки.

Headers

  • Настройка кодировки символов в обоих HTML и PHP заголовков UTF-8

    • PHP (PHP заголовков должен быть помещен перед любой выход: PHP echo, whitespace, HTML!):

      header('Content-Type: text/html; charset=utf-8'); 
      
    • HTML (HTML-заголовки помещаются в <head>/</head> тега):

      <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
      

Подключение

  • Кроме того, необходимо указать кодировка в подключение сам.

    • ПДО (указано в самом объекте):

      $handler = new PDO('mysql:host=localhost;dbname=database;charset=utf8', 'username', 'password'); 
      
    • MySQLi: (размещаются непосредственно после создания соединения, $mysqli является объектом подключения)

      $mysqli->set_charset("utf8"); // OOP style 
      mysqli_set_charset($mysqli, "utf8"); // procedural style 
      
    • MySQL (лишен): (помещается непосредственно после создания соединения)

      mysql_set_charset("utf8"); 
      

Database

  • Ваш базы данных и его таблицы должен быть установлен в UTF-8. Обратите внимание, что кодировка не такая же, как сортировка.

    Вы можете сделать это, выполнив указанные ниже запросы один раз для каждой базы данных и таблиц (например, в PhpMyAdmin)

    ALTER DATABASE databasename CHARACTER SET utf8 COLLATE utf8_unicode_ci; 
    ALTER TABLE tablename CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci; 
    

    Внимание ... Существуют различные ситуации, которые нуждаются в различных ALTERs. Details Here. Выполнение неправильного ALTER, вероятно, ухудшит ситуацию. - Рик Джеймс

php.ini спецификация

  • В файле php.ini, вы должны указать кодировку по умолчанию для вашей платформы, как этот

    default_charset = "utf-8"; 
    

    (Это по существу то же самое, что и делать header('Content-Type: text/html; charset=utf-8'); на всех страницах)

Файл кодирования

  • Это также важно, чтобы сам .php файл UTF-8 закодирован. Если вы используете Notepad ++ для написания кода, это можно сделать в раскрывающемся списке «Формат» на панели задач. Вы должны использовать UTF-8 без спецификации.

Если вы следуете всем указателям выше, вероятность того, что ваша проблема будет решена. Если нет, вы можете посмотреть этот пост StackOverflow: UTF-8 all the way through.

+1

Спасибо, много, указав кодировку на подключении БД! –

+1

Хорошо, что он решил вашу проблему! Тем не менее, все эти шаги должны применяться, чтобы убедиться, что ваш код имеет правильную кодировку. :) – Qirel

+0

Внимание: эти 'ALTERs' могут дополнительно испортить сохраненные данные. Требуется больше анализа, чтобы решить, использовать ли их или «двухэтапный». –

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