简单到可以测试:
echo(~~"Hello World"); //Echos Hello World
echo(~"Hello World"); //Echos �����ߨ����
echo(~"�����ߨ����"); //Echos @B@B@B@B@B W@B@B@B@B为什么它可以直接在两个not的顶部正常工作,但不能用于复制和粘贴的字符串输出?
我猜可能有一些数据在某个地方丢失了,但是我如何才能以这样的方式输出数据,如果我将其复制并粘贴到代码中,而代码发现它不是按位计算的,那么它将实际工作呢?
这已经困扰了我和其他一些我认识的人很长一段时间了!
发布于 2011-09-28 09:00:57
这是因为您看到的char包含无效的(不存在的)代码。
例如,H代码是72。~72是-73。
只要它不是有效的字符,并且不能显示-它显示为一个带问号的正方形。因此,它不能被翻译回来,因为你不能用code -73复制char (或者更准确地说,你的记事本或操作系统不能做到这一点)
发布于 2011-09-28 09:08:06
Ascii H是0100 1000或字符72,~H是1011 0111或字符183。这超出了基本的Ascii表128。
由于PHP没有规定字符串的特定编码,因此生成的字符将取决于脚本的代码页。
这可能是不可打印的字符(因此用�表示),当您复制/粘贴时,符号�将简单地替换它。
有关将字符串实现为字节数组的更多详细信息,请参阅Php Strings。
发布于 2011-09-28 09:12:51
如前所述,问题在于您试图回显的字符是不可打印的。您可以检查此脚本的各个步骤中发生了什么,以了解如果确实需要存储此脚本并在以后检索它,您可以执行哪些操作。
$a = "Hello World";
$b = ~$a;
$chars = unpack("c11chars", $b);
foreach ($chars as $char) {
echo $char . ' = ' ;
echo chr($char) . "\n";
}
$out = '';
foreach ($chars as $char) {
$out .= pack("c", $char);
}
echo ~$out;输出:
-73 = ?
-102 = ?
-109 = ?
-109 = ?
-112 = ?
-33 = ?
-88 = ?
-112 = ?
-115 = ?
-109 = ?
-101 = ?
Hello World?是我的回声,因为它们是不可打印的。
https://stackoverflow.com/questions/7577233
复制相似问题