【问题标题】:How to use a unicode character without writing the actual unicode character?如何在不写实际 unicode 字符的情况下使用 unicode 字符?
【发布时间】:2015-12-22 06:38:36
【问题描述】:

我只是偶然发现了这段代码:

/**
 * @param $string
 * @return bool
 */
protected static function isRubel($string)
{
    $lString = strtolower($string);

    /**
     * @hint: The characters looking like "p" as in Petra are in fact instances of cyrillic "Er"!
     */

    return strpos($string, 'руб') !== false || strpos($string, 'р') !== false || strpos($lString, 'rub') !== false;
}

作者很好地提供了一个提示,这个字符不是p,而是一个unicode符号р;正如我所认为的那样,它是p

为了更清楚地表明该字符是 unicode 符号,是否可以将这段代码写成不同的方式?

从某种意义上说,写 unicode 表示而不实际写 unicode 字符。

我知道我可以定义一个字符串常量CRYLLIC_ER = р,但我一直在寻找更通用的解决方案。

【问题讨论】:

  • 可能重复 ^ ?
  • 仍然,使用常量。
  • PHP 不支持 unicode,因此该字符实际上是用 UTF-8 编码的。不过,有一个简单的技巧可以将 unicode 转义字符转换为 UTF-8,您可以使用 json_decode('"\u0440"')。顺便说一下,这是您的特殊p 的代码。
  • @Havenard 这是 RC 链接中的内容,将属于重复项,n'est-ce pas?

标签: php unicode utf-8


【解决方案1】:

从 PHP 7 开始,您可以使用以下语法:

$str = "\u{####}";

在此之前,您可以使用 UTF-8 字节值使其非常明显:

$str = "\x##\x##";

但就我个人而言,我会做作者所做的,只是写在评论中。

【讨论】:

  • 如果是这样,那么 RC 发布的内容将是重复的,n'est-ce pas?
  • 不会做作者所做的事情。只需要一个错误的打开/保存一个伪劣的应用程序来破坏那块代码。
  • @Mr.Llama,我在那里工作的是一个“劣质应用程序”,这样做总是会对单元测试产生影响,并且更改会出现在代码审查中。如果您在不太勤奋的商店工作,我会同意您的看法……但我们依赖流程和工具,并且喜欢嵌入式 unicode =)
  • @Mr.Llama 对于 Web 开发,我认为不支持 Unicode 是程序中一个致命的、破坏交易的缺陷。 尤其是在文本或 HTML 编辑器中。我绝对不想写 caf\xc3\xa9 而不是 café
  • @Evert 正是我在寻找,接受答案不是你个人的意见;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-10-01
  • 2018-06-08
  • 1970-01-01
  • 2020-01-21
  • 2010-11-27
  • 2014-06-15
  • 1970-01-01
相关资源
最近更新 更多