【问题标题】:How do I debug not working characters in PHP/HTML/MySQL?如何调试 PHP/HTML/MySQL 中不工作的字符?
【发布时间】:2012-08-22 00:06:44
【问题描述】:

我正在使用 PHP 和 MySQL 构建一个 HTML 网页,但在运行页面时遇到了瑞典字符 ÅÄÖ 的问题。它们显示为 � 而不是 Å/Ä/Ö。

我已在 HTML 元标记和 PHP 中将字符集设置为 UTF-8:

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

<meta charset="UTF-8">

此外,MySQL 在所有表上运行 utf8_general_ci 排序规则。

所有文件也应编码并保存为 UTF-8,无需 Unicode 签名 (BOM) 和规范化形式。

所有这些以前都完美无瑕,但今天,无论我尝试什么,我最终都会得到 - 而不是 Å/Ä/Ö。有什么好的方法可以调试这个并找到问题吗?

我的任何步骤是不必要的还是我忘记了什么?

【问题讨论】:

标签: php mysql html utf-8


【解决方案1】:

deceze's article 需要的是关于 SET NAMES 的部分:

mysql_set_charset('utf8', $connection); //not mysql_query("SET NAMES 'utf8'");

在你的 php 代码的开头,在数据库连接开始后添加它

【讨论】:

  • 我在哪里使用SET NAMES?你不应该这样做,而是使用mysql_set_charset
  • 你好。我正在参考这部分: $pdo = new PDO('mysql:dbname=encoding_test;host=localhost', 'user', 'pass', array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'));如果我没有正确理解您的文章,请您解释一下吗?
  • 对于 PDO 可以使用(尽管您应该在支持它的较新版本的连接字符串中指定字符集)。对于旧的mysql_ 扩展,使用mysql_set_charset。否则,mysql_real_escape_string 很容易出现问题,因为您在数据库级别更改编码,而没有正确通知 PHP mysql_ 函数有关更改。
【解决方案2】:

您可以尝试以 UTF-8 编码保存您的 php 文件。我假设这些文件是用别的东西写的(可能是 ISO-xxxx 或 ANSI)

要使用 Notepad++ 执行此操作,请选择所有行并复制到剪贴板,在编码菜单中将编码更改为不带 BOM 的 UTF-8,然后粘贴所有内容并保存。

【讨论】:

    【解决方案3】:

    这仅适用于少数记录还是所有带有瑞典字符的记录?

    您可以在浏览器设置中手动更改页面编码 - 这就是您测试它的方式:将其更改为 latin1/iso-8854-1 以查看是否正确显示这些错误为 utf-8。

    可能有人正在使用不支持 utf8 的浏览器或手动修改了编码。

    还要确保您的数据库连接也是 utf8。 (set names utf8;)

    【讨论】:

      猜你喜欢
      • 2018-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-11
      相关资源
      最近更新 更多