为什么我的 html 不显示从我的数据库中提取的特殊字符

lea*_*ple 3 html php mysql collation

我在我的 php 文件的顶部包含了这个:

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

我这样做是因为我的 file.php 没有在 html 文件或从我的数据库查询的数据中显示“á、é、í、ó、ú 或 ¿”。

在我放置了 'header('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>
Run Code Online (Sandbox Code Playgroud)

我也试过:

<meta charset="utf-8">
Run Code Online (Sandbox Code Playgroud)

和:

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
Run Code Online (Sandbox Code Playgroud)

我不知道是什么问题。当我将数据直接插入数据库时​​,特殊字符就在那里,但是当我从 file.php 插入它们时,它们会出现随机字符。

有谁知道为什么会这样?

Qir*_*rel 7

发生这种情况有几个原因。然而,重要的是您的整行代码使用相同的字符集集,并且可以设置为特定字符集的所有函数都设置为相同。使用最广泛的一种是 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 : (在创建连接后直接放置)
      * 对于 OOP: $mysqli->set_charset("utf8");
      * 对于过程: mysqli_set_charset($mysqli, "utf8");
      ( $mysqliMySQLi 连接在哪里)
    • MySQL(已弃用,应转为PDO或MySQLi):(创建连接后直接放置)
      mysql_set_charset("utf8");

数据库

  • 您的数据库及其所有表必须设置为 UTF-8。需要注意的是,charset是一样的排序规则。

    您可以通过为每个数据库和表运行以下查询一次来做到这一点(例如在 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 w/o BOM)。你应该使用UTF-8 w/o BOM.

如果您遵循上述所有指示,那么您的问题很可能会得到解决。如果没有,你可以看看这个 StackOverflow 帖子:UTF-8 all way through