【发布时间】:2019-11-01 10:54:24
【问题描述】:
我正在使用 htmlentities 转换特殊字符,但我遇到了 2 种不同类型的 é
<?php
header('Content-Type: text/html; charset=utf-8');
echo htmlentities("é")."\n";
echo htmlentities("é")."\n";
?>
输出:
é
é
我使用这个输出了 ASCII 值
echo ord("é");
echo ord("é");
输出
101
195
有没有办法强制 htmlentities 将 e 转换为可用字符?
【问题讨论】:
-
什么是可用字符? Unicode 有多种显示重音字符的方式
-
如何在输入上添加一个
str_replace("é", "é", $string);以使所有é相同? -
实际 ASCII 甚至不包含字符
é。 ASCII 中的 101 只是e- 对于任何大于 127 的内容,我们实际上甚至不再谈论 ASCII,而更有可能是ISO 8859-xy编码之一。您实际使用的字符编码(使用此数据,以及您输出它的页面)是您应该首先在此处添加的信息。 -
ord只查看您输入的任何输入值的第一个 byte。因此,如果ord("é")结果为您提供 101,那么您很可能有一个实际的e,它与某种 Unicode 编码形式的重音组合。 -
因为
ord只看第一个字节,你可以使用ord("é"[1])和ord("é"[2])来检查第二个和第三个字节的值是什么(如果它们存在,如果这实际上被编码为三个字节。)这可能会给你101 204 129,这意味着这是基本拉丁字符e(U+0065)的UTF-8表示,后跟U+0301,COMBINING ACUTE口音
标签: php character-encoding ascii