例如,当我从数据库中检索单词程序而不是程序时,将显示的是程序。 '和 - 改为 。我该如何解决这个问题?
答案 0 :(得分:8)
替换字符 (U + FFFD)表示您的数据未正确编码。您可能将输出声明为UTF-8,但您的数据库数据不是UTF-8编码的。所以你需要将数据转换为UTF-8。您可以使用mb_convert_encoding
来执行此操作。
答案 1 :(得分:5)
您的数据是否存储为UTF-8?在获取任何数据之前尝试执行这些查询:
SET NAMES utf8
SET CHARACTER SET utf8
还要确保您正在设置页面编码:
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=utf-8" />
答案 2 :(得分:4)
这是一个字符编码问题:在某些地方,字符编码被错误地解释。以下是您应该检查的区域,从您输出该页面时开始向后工作:
当您输出页面时,您应该在服务器(首选)或HTML中包含适当的内容类型标题:
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
当您连接到数据库时,您应该发出一个SET NAMES
查询,告诉数据库在向脚本发送数据时要使用的编码(请注意,这与表使用的编码无关)
SET NAMES utf8;
您的表格本身应该被定义为“正确”的字符编码:
CREATE TABLE foo (...) CHARSET=utf8;
如果您已使用latin1
创建了表并希望转换它们,那么您不仅需要发出ALTER TABLE
来更改CHARSET
,还要更改{每个文字专栏{1}} CHARSET
,TEXT
,CHAR
)。
如果所有这些看起来都是正确的,那么问题可能是“在路上”。也就是说,假设您有另一个表单将这些数据提交到数据库,您还需要更新该表单(VARCHAR
和Content-Type
)。
答案 3 :(得分:0)
这听起来像是字符集问题,您的数据库和网页需要使用相同的字符集(或者您需要在它们之间进行转换)。查看Joel on Software的this article。那个撇号似乎是一个卷曲的撇号,我的怀疑是破折号是一个破折号或类似的。
答案 4 :(得分:0)
可能是由于使用不同的字符造成的,例如马克的房子和马克的房子,通常我从MS字和其他字处理器中获取该字符,烦人
编辑: Whops,我看到堆栈溢出会自动更正字符......我的观点是,当您点击撇号按钮时,字处理器会创建不同的字符
答案 5 :(得分:0)
您正在将cp-1252视为iso-8859-1。 A very common mistake.使用utf-8,它是标准化的,或验证输入,以确保用户给出有效的iso-8859-1,当他这么说时。如果你没有(例如,你得到cp-1252),你可以将输入音译为iso-8859-1。