2010-06-04 58 views
1

我在我的mysql数据库中保存了一些非常好的外来字符。这是我现在使用的例如:いち外国字符在php中没有正确显示

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

为什么在我试图回应外来字符时出现问号?

+3

http://www.joelonsoftware.com/articles/Unicode.html – Amber 2010-06-04 23:53:32

回答

0

在数据库中使用什么编码,以及通过header()或HTML发送给浏览器的编码是什么?确保它们与您要输入的数据相匹配。

0

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

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

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

2

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

请注意,没有“外来字符”,但只有编码
你要知道什么编码的字符,并在所有三个网络应用部分正确设置它:

  • 数据库。表的编码必须设置为与实际数据编码相匹配。
  • PHP作为数据库的客户端编码。上面提到的SET NAMES。
  • 浏览器的编码。通过标题设置提到上面的其他SO'ers或其他服务器设置。
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');
+0

检查您的代码之前后 – 2010-06-05 01:01:38

+0

@Col。弹片特赦? – Artefacto 2010-06-05 02:07:49

+0

@Col。弹片固定集名称和接受字符集。顺便说一句,请随时自行修复它。 – Artefacto 2010-06-05 02:13:09