肉眼看到的相同两个字串的不同

2

祭出两个相同(其实不同)的字符串

$strA = '8888‬';
$strB = '8888';

我们肉眼看到的这两个字符串是绝对相同的, 对的, 他是一个'8888', 让我们用 php (世界上最好的语言) 输出下两个字串的长度

# code
var_dump($strA);
var_dump($strB);

# result
string(7) "8888‬"
string(4) "8888"

我滴妈呀, 怎么会不同呢, 纳闷..

让我们撕下她的伪装

for ($i = 0, $iMax = strlen($strA); $i < $iMax; $i++) {
    var_dump($strA[$i]);
}
string(1) "8"
string(1) "8"
string(1) "8"
string(1) "8"
string(1) "�"
string(1) "�"
string(1) "�"

咦, 这是个什么鬼. 不像是正常字符啊. 哦, 对了, 我们是用的Utf-8 字符集, 这三个应该是一个字符, 我们把它组合起来

获取到 ASCII 码值

for ($i = 0, $iMax = strlen($strA); $i < $iMax; $i++) {
    var_dump(ord($strA[$i]));
}
int(56)
int(56)
int(56)
int(56)
int(226)
int(128)
int(172)

这个编码值是 [226 128 172], 让我们找到它.

看, 在这里

来自于这个网站, 好像是输出格式化标识符. 以上.


如果觉得我的文章对你有用,请随意赞赏

你可能感兴趣的

GlaryJoker · 2018年08月04日

你的php是哪个版本。刚测过,5.6,7.0,7.2均正常,没有你文章中的情况。

回复

0

可能是复制的时候粘贴板过滤掉了, 也可能是编辑文章的时候过滤掉了.

多厘 作者 · 2018年08月07日
风痕 · 2018年08月05日

<?php

$a="aaaaa";
$b="aaaaa‬";

var_dump($a); var_dump($b);

回复

skyzhq · 2018年08月07日

同一个文件中,字符编码会不同?

回复

0

都是 utf-8, 但是第一个字串中存在了一个肉眼看不到的字符导致的.

多厘 作者 · 2018年08月07日
多厘 作者 · 2018年08月07日

这个问题出现的场景是把网页的内容导入到表单中, 然后提交服务端的时候出现的, 出现可能就是把页面中的换行符一并导入到页面中了.

回复

zhangya4548 · 2018年08月28日

曾经在使用phpstorm断点调试时候,在控制台中输出了变量值,然后复制到编辑器中用,结果导致两个字符串就是不一样,调死了都不知道什么回事,最后同事帮排查才发现是phpstorm控制台输出的字符串中会带有这些隐藏的字符

回复

载入中...