温馨提示:本文翻译自stackoverflow.com,查看原文请点击:php - What are the rules of string manipulation when using backticks (grave accents)?
backticks php shell string

php - 使用反引号(重音符)时,字符串操作的规则是什么?

发布于 2021-04-16 06:03:03

在PHP中,当你写一个集合等于一个用重音符包裹的字符串的变量时,它将像在shell_exec()命令内一样被执行严重的重音符号(`)(不是单引号)在PHP中代表什么?

因此,在php中,你可以做各种事情来将字符串与变量结合起来,等等,使用`代替'或“时,我可以做什么,也不能做什么?

查看更多

提问者
Kristian
被浏览
0
jnrbsn 2012-05-31 03:15

在PHP中,该字符称为反引号运算符。

用反引号引起来的文字字符串是一个T_ENCAPSED_AND_WHITESPACE标记。你可以通过运行以下命令来确认这一点:

print_r(token_get_all('<?php `uname`;'));

这给你这个:

Array
(
    [0] => Array
        (
            [0] => 367
            [1] => <?php 
            [2] => 1
        )

    [1] => `
    [2] => Array
        (
            [0] => 313
            [1] => uname
            [2] => 1
        )

    [3] => `
    [4] => ;
)

然后运行token_name(313),它会给你T_ENCAPSED_AND_WHITESPACE

对于解析器而言,用反引号引起来的字符串等效于其中包含变量字符串,例如"hello $world"字符串的文字/常量部分(hello部分)为T_ENCAPSED_AND_WHITESPACE

因此,要回答你的问题,你可以对包含变量的字符串执行的任何操作,都可以对反引号中包含的字符串执行的操作。

那为什么T_ENCAPSED_AND_WHITESPACE呢?可能是因为像包含变量的字符串一样,它的值是在运行时确定的。T_CONSTANT_ENCAPSED_STRING(正常的文本字符串)是一种像在解析器眼中的常数。