【问题标题】:Really weird substr behavior in PHP, inconsistent outputsPHP中真正奇怪的substr行为,输出不一致
【发布时间】:2020-05-08 19:02:56
【问题描述】:

所以我有这个代码:

$phone1="‭1234567890‬";

$phone2="1234567890";

$phoneformat1 = '('.substr($phone1, 0, 3).') '.substr($phone1, 3, 3).'-'.substr($phone1,6);

$phoneformat2 = '('.substr($phone2, 0, 3).') '.substr($phone2, 3, 3).'-'.substr($phone2,6);

echo $phoneformat1 . "<br>";

echo $phoneformat2;

这是输出:

(‭) 123-4567890‬
(123) 456-7890

有人可以向我解释这里发生了什么吗?为什么相同的代码会给出不稳定的输出?你可以在http://phptester.net进行测试

【问题讨论】:

    标签: php substr


    【解决方案1】:

    因为第一个的真实值是$phone1="\U+202D1234567890\U+202C";,第二个是$phone2="1234567890";

    使用还显示不可打印字符(如 this)的在线工具检查值可能很有用,以确保该值是“真实值”或带有一些额外字符。

    【讨论】:

    • 可能会提供更多信息,例如那是什么以及您是如何找到它的。
    • fileformat.info/info/unicode/char/202d/index.htm - 这是一个特殊字符,为了测试,您可以将值从第二个复制到第一个,它的工作方式相同,会给您相同的结果。我发现将它复制到我的终端,这也显示了隐藏的字符,可能不知何故你错误地输入了这个值或错误地复制了它,不确定。严格来说,值的问题与 php 无关。
    • 我不是 OP 我知道它是什么以及如何看到它。我要补充你的答案。
    • 我很好奇这里。我知道字符编码的东西,unicode,utf-8 以及基于字符的动态位等,但是你怎么知道它在这个例子中被使用而不用猜测?
    • 当然,抱歉。添加了更准确的答案。
    猜你喜欢
    • 1970-01-01
    • 2013-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    • 2013-03-06
    • 2019-07-25
    相关资源
    最近更新 更多