字符编码失败,为什么\ xBD在PHP + HTML中显示不正确

时间:2012-07-19 02:32:24

标签: php utf-8 character-encoding

我只是想更好地理解字符编码,所以我做了一些测试。

我有一个保存为UTF-8的PHP文件,如下所示:

<?php
declare(encoding='UTF-8');

header( 'Content-type: text/html; charset=utf-8' );
?><!DOCTYPE html>

<html>

<head>
    <meta charset="UTF-8" />
    <title>Test</title>
</head>

<body>
    <?php echo "\xBD"; # Does not work ?>
    <?php echo htmlentities( "\xBD" ) ; # Works ?>
</body>

</html>

页面本身显示:

enter image description here

问题的关键在于我的Web应用程序有一堆字符编码问题,人们从Outlook或Word中复制和粘贴,然后字符转换为菱形问号(那些有真名吗?)

我正在尝试学习如何在页面加载时确保我的所有输入都转换为UTF-8(基本上是$_GET$_POST$_REQUEST),以及所有使用适当的UTF-8处理方法完成输出。


我的问题是:为什么我的页面显示第一个回音的问号,是否还有人有关于在PHP中创建UTF-8安全Web应用程序的任何其他信息?

2 个答案:

答案 0 :(得分:3)

0xBD无效UTF-8。如果你想在UTF-8中编码“½”,那么你需要使用0xC2 0xBD。

>>> print '\xc2\xbd'.decode('utf-8')
½

如果你想使用另一个字符集中的文本(在本例中为Latin-1),那么你需要先使用各种iconv或mb函数将其转码为UTF-8。

此外:

$ charinfo �
U+FFFD REPLACEMENT CHARACTER

答案 1 :(得分:1)

\xBD无效,因为utf8你想要的是\xC2\xBD,问号是什么应用程序替换无效的代码点,所以如果你在你的utf8文本中看到它不是utf8或损坏。