以下是该字符:
Â
好的,建议我在文档头中将内容类型更改为utf8,但是我仍然在数据库中得到这些字符。这是我添加了内容类型后的测试。
adf af  aafd a a
aa a  afa aÂ
adf
Â
好的,建议我在文档头中将内容类型更改为utf8,但是我仍然在数据库中得到这些字符。这是我添加了内容类型后的测试。
adf af  aafd a a
aa a  afa aÂ
adf
很可能这个字符与UTF-8编码问题有关。在此情况下,Joel的文章《关于Unicode和字符集的绝对最低限度,每位软件开发人员都必须知道(不容置辩!)》是绝对推荐阅读的。
在将字符发送到数据库之前过滤掉它们几乎肯定是错误的做法。
在你提到的情况下,你可能正在处理字符U+00A0,它是非间断空格的Unicode字符。这个字符的位模式是:
1010 0000
在进行UTF-8编码之后,编码字节看起来像:110x xxxx 10xx xxxx
'x'代表 Unicode 字符值的一位,因此 U+00A0 的编码形式为:
1100 0010 1010 0000
第二个字符的字节值与您正在编码的原始字符(U+00A0)相同,即0xC2 0xA0。巧合的是,第一个字符是您看到的Â。
这是一个“带环抑扬符的拉丁大写字母A”,HTML代码为Â Unicode U+00C2。
在php中:0xC2=194, 0xA0=160,
$output=str_replace(chr(194).chr(160), " ", $html);
这将把Â
替换为它们本应该是的
。
我是楼主。我已经退出登录,但我回来分享解决方案。实际上问题出在编码上。我添加了:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
在我这样做之后,我注意到我的数据库仍然出现了一些奇怪的字符。然后我改变了数据库表上的编码,但也没有任何作用。只剩下浏览器了... 我检查了浏览器中的编码,发现它正在使用 ISO-8859-1。我将浏览器的编码更改为 utf-8,现在它可以正常工作了。:)
感谢所有做出贡献的人。
我认为你遇到了我曾经遇到的一个 Bug。ISO-8859-1 实际上是针对西欧语言的 Windows-1152(我想是 1152)的一个子集。问题在于当 Web 服务器接受 ISO-8859-1 时,浏览器很乐意提交 Windows-1152 字符。这意味着浏览器发送的数据是无效的 ISO-8859-1。至少我的 Windows 安装就发生了这种情况。我在 IE 和 Firefox 中都见过这种行为。
我使用所见即所得编辑器遇到了这个问题,用户要从 Word 文档中粘贴数据。该文档将包含连字号和破折号。一个字符会被正确提交,而另一个字符则无法识别,因为该字符不在 ISO-8859-1 中(我永远记不清哪个是哪个)。
我们使用的 .net 框架也没有帮助,因为它在转换为 Unicode 时没有报告无效的 ISO 字符。