почему мой HTML не отображает специальные символы, взятые из моей базы данных

Я включил это в верхней части моего php-файла:

<?php
header('Content-Type: text/html; charset=UTF-8');
?>

Я сделал это, потому что мой файл file.php не отображал «á, é, í, ó, ú или ¿» в html-файле или из данных, запрошенных из моей базы данных.

После того, как я поместил заголовок (Content-Type: text / html; charset = UTF-8 ‘); В строке кода моя html-страница начала понимать специальные символы в html-файле, но данные, полученные из моей базы данных, теперь имеют черный ромб с вопросительным знаком.

В моей базе данных сопоставление «utf8_spanish_ci»

в HTML-теге я пытался поставить lang = es, но это не сработало, я также пытался поместить метатег внутри тега head

<!DOCTYPE html>
<html lang=es>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<head>

Я также попробовал:

<meta charset="utf-8">

а также:

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

Я не знаю, в чем проблема. Когда я вставляю данные непосредственно в базу данных, есть специальные символы, но когда я вставляю их из моего file.php, они появляются со случайными символами.

Кто-нибудь знает, почему это происходит?

1

Решение

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

соединение

  • Вам также необходимо указать кодировку в само соединение.
    • PDO (указывается в самом объекте):
      $handler = new PDO('mysql:host=localhost;dbname=database;charset=utf8', 'username', 'password', array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET CHARACTER SET UTF8"));
    • MySQLi: (помещается сразу после создания соединения)
      * Для ООП: $mysqli->set_charset("utf8");
      * Для процедурного: mysqli_set_charset($mysqli, "utf8");
      (где $mysqli такое соединение MySQLi)
    • MySQL (depricated, вы должны конвертировать в PDO или MySQLi): (помещается сразу после создания соединения)
      mysql_set_charset("utf8");

База данных

  • Ваш база данных и все его таблицы должны быть установлены в 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;

Файл-кодирование

  • Также важно, чтобы .php Сам файл в кодировке UTF-8. Если вы используете Notepad ++ для написания своего кода, это можно сделать в раскрывающемся меню «Формат» на панели задач (Конвертировать в UFT-8 без спецификации). Вы должны использовать UTF-8 w/o BOM,

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

1

Другие решения

Уверены ли вы? И вы уверены, что извлекаете свои данные из базы данных? Сказав это, большинство баз данных требуют, чтобы вы сохраняли данные не так, как ваш вопрос. Для этого есть действительно веские причины безопасности.

0

Вы должны использовать utf8_general_ci в качестве кодировки базы данных также перед вставкой запроса, вы должны выполнить этот запрос

Mysql_query(" SET NAMES 'utf8'");
0
По вопросам рекламы [email protected]