Я включил это в верхней части моего 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, они появляются со случайными символами.
Кто-нибудь знает, почему это происходит?
Это может происходить по нескольким причинам. Однако важно, чтобы вся строка кода использовала один и тот же набор кодировок и чтобы все функции, которые могут быть установлены для конкретной кодировки, были установлены одинаково. Наиболее широко используемым является UTF-8, который я предлагаю вам использовать.
соединение
$handler = new PDO('mysql:host=localhost;dbname=database;charset=utf8', 'username', 'password', array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET CHARACTER SET UTF8"));
$mysqli->set_charset("utf8");
mysqli_set_charset($mysqli, "utf8");
$mysqli
такое соединение 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 полностью.
Уверены ли вы? И вы уверены, что извлекаете свои данные из базы данных? Сказав это, большинство баз данных требуют, чтобы вы сохраняли данные не так, как ваш вопрос. Для этого есть действительно веские причины безопасности.
Вы должны использовать utf8_general_ci в качестве кодировки базы данных также перед вставкой запроса, вы должны выполнить этот запрос
Mysql_query(" SET NAMES 'utf8'");