到底是怎么回事?我从来没有见过这样的 PHP 语法:


我发现这段 php 代码中有一些奇怪的语法:

我特别好奇,这是一个什么样的语法?
${"\x47\x4c\x4fB\x41\x4c\x53"}['v9800']



暮色呼如
浏览 90回答 1
1回答

HUX布斯

首先,为了解决代码语法本身的问题,PHP 允许您动态创建变量名称。假设你有一个变量:$test = 123;您可以动态创建对此变量的引用,如下所示:echo ${'test'};&nbsp; // Prints '123'你为什么想做这个?上面的例子毫无意义,但是假设您需要在运行时动态运行一些变量名称:$var1 = 'A';$var2 = 'B';$var3 = 'C';for ($i = 1; $i <= 3; $i++) {&nbsp; &nbsp; echo ${'var' . $i};}// Prints 'ABC'既然我们知道了语法的含义,那么它到底\x47\x4c\x4fB\x41\x4c\x53意味着什么呢?用于\x转义十六进制字符序列。简单来说,您显示的字符串是一堆字符,有人将其表示为十六进制,而不是您习惯看到的人类可读的 ASCII 字符。如果我们去掉\x逃逸部分,我们就剩下:474c4fB414c53据我所知,B这里并不是十六进制的。这给我们留下了:474c4f 414c53翻译过来就是:GLO ALS如果我们替换B我们得到:GLOBALS如果我们将其添加回动态变量引用并再次查看代码,我们会得到:$GLOBALS['v9800']这很有趣,因为$GLOBALS是 PHP 中可用的特殊数组,它可以访问全局范围内的所有变量。所以本质上,您的代码正在尝试访问一个名为 的全局变量$v9800。您必须决定这对您的应用程序意味着什么,但此代码可能是可疑的。可能有人故意使用这种神秘的方法来伪装他们的代码,以尝试访问全局变量。
打开App,查看更多内容
随时随地看视频慕课网APP