2

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

我有一个保存为 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>

页面本身显示了这一点:

在此处输入图像描述

问题的要点是我的 Web 应用程序有一堆字符编码问题,人们从 Outlook 或 Word 复制和粘贴,字符被转换成菱形问号(这些有真实姓名吗?)

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


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

4

2 回答 2

4

0xBD 不是有效的 UTF-8。如果要在 UTF-8 中编码“½”,则需要使用 0xC2 0xBD 代替。

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

如果您想使用来自另一个字符集的文本(在这种情况下为拉丁语 1),那么您需要首先使用各种 iconv 或 mb 函数将其转码为 UTF-8。

还:

$ charinfo �
U+FFFD REPLACEMENT CHARACTER
于 2012-07-19T02:40:55.853 回答
2

\xBD无效,因为您想要的是 utf8 \xC2\xBD,问号是应用程序替换无效代码点的内容,因此,如果您在 utf8 文本中看到它不是 utf8 或已损坏。

于 2012-07-19T02:41:09.927 回答