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

时间:2015-11-27 00:47:04

标签: php html mysql collation

我把它包含在我的php文件的顶部:

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

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

我放置'header('Content-Type:text / html; charset = UTF-8');'代码行我的html页面开始理解html文件中的特殊字符但是,从我的数据库收到的数据现在有一个带问号的黑色菱形。

我的数据库的排序规则是“utf8_spanish_ci”

在html标签上我试图把lang = es但是这从来没有用过我还试图将元标记放在头标记中

<!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中插入它们时,它们会随机出现。

有谁知道为什么会这样?

3 个答案:

答案 0 :(得分: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 :(创建连接后直接放置)
      *对于OOP:$mysqli->set_charset("utf8");
      *对于程序:mysqli_set_charset($mysqli, "utf8");
      (其中$mysqli是MySQLi连接)
    • 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,无需BOM )。您应该使用UTF-8 w/o BOM

如果你按照上面的所有指示,你的问题很可能会得到解决。如果没有,您可以查看此StackOverflow帖子:UTF-8 all the way through

答案 1 :(得分:0)

你确定吗?您确定要从数据库中检索数据吗?话虽如此,大多数数据库都要求您以与您的问题不完全相同的方式保存数据。这有非常有效的安全原因。

答案 2 :(得分:0)

在插入查询之前,您应该使用utf8_general_ci作为数据库编码,您应该运行此查询

Mysql_query(" SET NAMES 'utf8'");