PHP:chr函数问题与特殊字符

Bis*_*saZ 5 php utf-8 chr

在PHP中,我有以下代码:

<?php
  echo "€<br>";
  echo ord("€") . "<br>";
  echo chr(128) . "<br>";
Run Code Online (Sandbox Code Playgroud)

我得到以下输出:

€
128
?
Run Code Online (Sandbox Code Playgroud)

为什么chr功能不能为我提供€符号?我怎么能得到€?我真的需要这个工作.提前致谢.

Fab*_*ler 5

chr并且ord仅适用于单字节 ASCII 字符。进一步来说ord仅查看其参数的第一个字节。

\n\n

欧元符号是 UTF-8 中的三字节字符:0xE2 0x82 0xAC,因此ord("\xe2\x82\xac")(使用 UTF-8 符号)返回 226 (0xE2)

\n\n

对于 ISO-8859-1 (latin1) 字符集中也存在的字符,您可以使用utf8_encode()utf8_decode(),但不幸的是 \xe2\x82\xac 符号不包含在那里,因此utf8_decode(\'\xe2\x82\xac\')将返回“?” 并且无法转换回来。

\n\n

TL;DR:您不能将ordandchr与 UTF-8 等多字节编码一起使用

\n