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


PHP: chr Function Issue with Special characters

在PHP中我有以下代码:

<?php
  echo "€<br>";
  echo ord("€") . "<br>";
  echo chr(128) . "<br>";

得到如下输出:

€
128
�

为什么chr函数不能为我提供€符号?我怎样才能拿到欧元?我真的需要这件事成功。

chrord只能使用单字节ASCII字符。更具体地说,ord只查看其参数的第一个字节。

欧元符号在UTF-8: 0xE2 0x82 0xAC中是一个三字节字符,因此ord("€")(带有UTF-8符号)返回226 (0xE2)

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

TL;DR: ordchr不能用于像UTF-8这样的多字节编码