ord,md5在@上显示不同的行为

Kri*_*ofe 0 php string md5 char ord

我曾经ord检查过,@并且@?是相同的字符。但是ord输出相同的值md5却不输出。

php -a
Interactive shell

php > echo ord('@');
64
php > echo ord('@?');
64

php > echo md5('@');
518ed29525738cebdac49c49e60ea9d3
php > echo md5('@?');
e6124653b6620abe51d7c401a7644674
php >
Run Code Online (Sandbox Code Playgroud)

这是屏幕截图,
在此处输入图片说明

Nie*_*sol 10

您的第二个@之后是U+202A - LEFT-TO-RIGHT EMBEDDING。由于它们是不同的字符串,因此自然它们具有不同的MD5编码。

php > echo md5("@\u{202a}");
e6124653b6620abe51d7c401a7644674
Run Code Online (Sandbox Code Playgroud)

  • 出于好奇,您如何解决? (5认同)
  • 伙计,那是一些认真敏锐的观察。 (3认同)
  • 要添加:ord这样做:`将字符串的第一个字节的二进制值解释为0到255之间的无符号整数。因此,它仅查看字符串的第一个字节。通过执行`@ sdafaf34we`,您可能会得到相同的结果,而obvioulsy的md5与`@`不同。 (2认同)
  • 您能解释一下为什么`toString`中的16吗? (2认同)