外来字符在php中没有正确显示

时间:2010-06-04 23:51:24

标签: php mysql special-characters

我将一些外国字符保存到我的mysql数据库中。这就是我现在正在使用的例子:いち

当我尝试从数据库中回显该列时,它只显示为'??'

为什么在尝试回复外国字符时会出现问号?

4 个答案:

答案 0 :(得分:2)

很可能你没有设置正确的Mysql客户端编码 您必须发出SET NAMES <encoding>查询,其中<encoding>是您的HTML页面编码。

请注意,没有“外国字符”,只有编码 你必须知道你的角色编码是什么,并在所有三个网络应用程序部分中正确设置:

  • 数据库。必须将表的编码设置为与实际数据编码匹配。
  • PHP作为数据库的客户端编码。上面提到的SET NAMES。
  • 浏览器的编码。由标题提到上面提到的SO'ers或其他服务器设置。

答案 1 :(得分:0)

您在数据库中使用了哪种编码,以及您通过header()或HTML向浏览器发送了哪些编码?确保它们与您输入的数据相符。

答案 2 :(得分:0)

您应该更改数据库编码,并将PHP标头中的编码指定为UTF-8。 MySQL允许您选择默认编码,或者基于每个表或每个字段。

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

如果您保持数据库的编码和脚本的编码一致,则不应该有任何问题。

答案 3 :(得分:0)

为了支持这些字符,您必须选择

  • 包含这些字符的字符集,通常为Unicode
  • 将字符映射到基础字节流的字符编码,通常为UTF-8或不常见UTF-16

我们选择Unicode / UTF-8,因为这是推荐的标准。你必须确保这些:

  • 您插入数据库的数据是UTF-8,如果不是,则必须将其转换(例如,使用iconvmb_convert_encoding)。如果您要从HTML表单插入数据,请务必将属性accept-charset="utf-8"添加到<form>元素。
  • 您的数据库必须支持unicode。在MySQL中,请参阅CREATE DATABASE语法和supported character sets/collations(读取:编码)。你应该选择UTF-8 / Unicode。
  • 数据库必须知道PHP MySQL驱动程序将以UTF-8传递字符串(即,客户端编码必须设置为UTF-8)。在MySQL中,这是通过执行SQL语句SET NAMES UTF8
  • 来完成的
  • Web服务器必须声明其内容以UTF-8编码。在PHP中,这是通过header('Content-type: text/html; charset=utf-8');
  • 完成的