php输出 而不是 -

时间:2009-08-23 12:50:06

标签: php

例如,当我从数据库中检索单词程序而不是程序时,将显示的是程序。 '和 - 改为 。我该如何解决这个问题?

6 个答案:

答案 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}} CHARSETTEXTCHAR)。

如果所有这些看起来都是正确的,那么问题可能是“在路上”。也就是说,假设您有另一个表单将这些数据提交到数据库,您还需要更新该表单(VARCHARContent-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。