【问题标题】:PHP: chr Function Issue with Special charactersPHP:带有特殊字符的 chr 函数问题
【发布时间】:2015-09-30 11:31:19
【问题描述】:

在 PHP 中我有以下代码:

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

我得到以下输出:

€
128
�

为什么 chr 函数不能为我提供 € 符号?我怎样才能获得欧元?我真的需要这个工作。提前致谢。

【问题讨论】:

  • 我需要字符串中的实际€符号。
  • 保存为 UTF-8 的文件是什么(带/不带 BOM)?可能是问题所在。将其保存为 ANSI,所有 3 个回显都会正确显示。
  • 它保存为没有 BOM 的 UTF-8。
  • 使用UTF-8时,ord('€')返回226而不是128(后者是拉丁文1十进制码)
  • 我得到的是 226 而不是第二个的 128,所以当保存为 UTF-8(带/不带 BOM)时,有些东西不会出现在这里。

标签: php utf-8 chr


【解决方案1】:

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 等多字节编码一起使用

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-18
    • 1970-01-01
    • 2016-03-07
    • 2021-05-26
    • 1970-01-01
    • 1970-01-01
    • 2021-07-02
    相关资源
    最近更新 更多