PHP中非常奇怪的substr行为,输出不一致

PHP中非常奇怪的substr行为,输出不一致,php,substr,Php,Substr,所以我有这个代码: 有人能给我解释一下这里发生了什么事吗?为什么相同的代码会给出不稳定的输出?您可以在处进行测试,因为第一个的实际值是$phone1=\U+202D1234567890\U+202C;第二个是$phone2=1234567890 使用在线工具检查值可能会很有用,这些工具也会显示不可打印的字符,例如,以确保值是真实值或带有一些额外字符。因为第一个值的真实值是$phone1=\U+202D1234567890\U+202C;第二个是$phone2=1234567890 使用在线工具

所以我有这个代码:


有人能给我解释一下这里发生了什么事吗?为什么相同的代码会给出不稳定的输出?您可以在

处进行测试,因为第一个的实际值是$phone1=\U+202D1234567890\U+202C;第二个是$phone2=1234567890


使用在线工具检查值可能会很有用,这些工具也会显示不可打印的字符,例如,以确保值是真实值或带有一些额外字符。

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


使用在线工具检查该值可能会很有用,这些工具也会显示不可打印的字符,例如,确保该值是真实的或带有一些额外的字符。

可能会提供更多信息,例如该值是什么以及您是如何找到的。-这是一个特殊的字符,在测试中,你可以将第二个字符的值复制到第一个字符,它的工作原理是一样的,结果也是一样的。我发现把它复制到我的终端上也会显示隐藏的字符,可能你把这个值放错了,或者复制错了,不确定。严格来说,这是值的问题,而不是php的问题。我不是OP,我知道它是什么以及如何看到它。我要补充你的答案,我很好奇。我知道字符编码的东西,unicode,utf-8和基于字符的动态位等等,但是你怎么知道在这个例子中使用了它而不用猜测呢?当然,对不起。添加了更精确的答案。可能会提供更多信息,如这是什么以及您是如何找到它的。-这是一个特殊的字符,在测试中,你可以将第二个字符的值复制到第一个字符,它的工作原理是一样的,结果也是一样的。我发现把它复制到我的终端上也会显示隐藏的字符,可能你把这个值放错了,或者复制错了,不确定。严格来说,这是值的问题,而不是php的问题。我不是OP,我知道它是什么以及如何看到它。我要补充你的答案,我很好奇。我知道字符编码的东西,unicode,utf-8和基于字符的动态位等等,但是你怎么知道在这个例子中使用了它而不用猜测呢?当然,对不起。添加了更精确的答案。
$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