Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/479.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何转义在PHP中回响的Javascript代码_Php_Javascript_Jquery_Ajax_Escaping - Fatal编程技术网

如何转义在PHP中回响的Javascript代码

如何转义在PHP中回响的Javascript代码,php,javascript,jquery,ajax,escaping,Php,Javascript,Jquery,Ajax,Escaping,我在php页面的jquery数据对象中捕获了这段代码 echo " var $d = $('<div/>', { id: 'hi' + $('#textResp').children().length, class: 'eventdiv', html: 'hello' }).hide().fadeIn(3000); $('#textResp').append($d) "; echo” 变量$d=$(''{

我在php页面的jquery数据对象中捕获了这段代码

echo "
    var $d = $('<div/>', {
        id: 'hi' + $('#textResp').children().length,
        class: 'eventdiv',
        html: 'hello'
    }).hide().fadeIn(3000);

    $('#textResp').append($d)

";
echo”
变量$d=$(''{
id:'hi'+$('#textResp').children().length,
类:“eventdiv”,
html:“你好”
}).hide().fadeIn(3000);
$('#textrep')。追加($d)
";

问题是,并没有逃脱。我曾尝试使用/'进行转义,但它出现了一个错误。我肯定我做错了,有人知道把/'而不是''放在哪里吗?

在所有
之前,你需要使用
\


然而,这是令人费解的,为什么你觉得你需要转义字符?看起来您只是在回显此输出,如果这是在
标记之间,您应该没事。

您的撇号实际上看起来不错。但是,在双引号字符串中,PHP将计算以美元符号开头的任何字符串作为变量,而不会产生所需的结果。尝试将与jquery相关的
$
实例替换为
\$
。像这样:

echo "
    var \$d = \$('<div/>', {
        id: 'hi' + \$('#textResp').children().length,
        class: 'eventdiv',
        html: 'hello'
    }).hide().fadeIn(3000);

    \$('#textResp').append(\$d)

";
echo”
变量\$d=\$(“”{
id:'hi'+\$('\;textResp').children().length,
类:“eventdiv”,
html:“你好”
}).hide().fadeIn(3000);
\$('\'textrep')。追加(\$d)
";

PHP将尝试展开变量,
$name
,这些变量出现在双引号中的字符串中。由于
$d
在PHP解释器中看起来像一个变量,它将尝试用变量的值替换它

假设您没有在任何地方定义
$d
,这将产生一个空白,可能还会产生一个通知(如果您使用的是错误级别E_通知)


为了防止这种情况发生,请使用反斜杠转义美元符号(将
$
替换为
\$

使用单引号构造字符串。只有在明确包含要计算的变量时才使用双引号。PHP正在尝试评估您在其中的所有$reference。通过使用单引号,您将避免许多转义问题

echo '
    var $d = $("<div/>", {
        id: "hi" + $("#textResp").children().length,
        class: "eventdiv",
        html: "hello"
    }).hide().fadeIn(3000);

    $("#textResp").append($d)

';
echo'
变量$d=$(“”{
id:“hi”+$(“#textResp”).children().length,
类:“eventdiv”,
html:“你好”
}).hide().fadeIn(3000);
$(“#textrep”)。追加($d)
';
您完全可以使用a而不是引号,这将简化事情:

echo <<<'DOC'
    var $d = $('<div/>', {
        id: 'hi' + $('#textResp').children().length,
        class: 'eventdiv',
        html: 'hello'
    }).hide().fadeIn(3000);

    $('#textResp').append($d)
DOC;

echo在php中使用
json\u encode
函数,其行为类似于rails中的
escape\u javascript
函数

只需将字符串参数传递给
json_encode
函数,它就会为您返回转义字符串,请参见下面的示例代码:

<?php
$form_html  = <<HTML
<form action='...' ...>
    <input type='...' name='...' ...>
    ...
</html>
HTML;
?>

var form_html = <?php echo json_encode($form_html); ?>;
$('.remote#create_form').html(form_html).slideDown();

var form_html=;
$('.remote#create_form').html(form_html).slideDown();

等等,为什么它会出错?你有“内在的”“,它不应该做任何事情……可怕的事情可能正在发生,因为PHP将所有这些$signs插入为PHP变量,这将完全破坏您的输出。回显使用单引号。根据我的经验,将PHP变量放入其中最简单、最安全的方法是使用
json\u encode
。为什么没有人建议
?>第二行:
var$d=
看起来像是jQuery变量:P@jnpcl:你怎么能确定呢?@asph:代码的上下文。如果您假定
$d
是一个PHP变量,这是没有意义的。@asph:使用jQuery时,用这种方式命名变量(
$d
)可以让您在该变量上使用jQuery函数更容易一些:
$d.func()
,而不是
$(d.func()
。在我看来,这似乎比让
$d
成为用于动态命名javascript变量的PHP变量更可能发生。@jnpcl
$d
是名为的变量/属性的有效JS标识符<代码>$d
(很可能是
vard=…
)。没有“jQuery魔力”,它也不是隐含的
$(d)
(它计算
d
,并将其用作函数对象应用程序的参数,函数对象[希望]是通过计算
$
得到的)。然而,
$var
约定在JavaScript中是不受欢迎的,它可能来自于在PHP/Perl中使用sigils。不过,我确实同意——希望——
$d
不是一个PHP变量,因为那种“动态”代码听起来就像一团糟;-)事实并非如此,这就是为什么我在第二段中说不需要它。但我向他表示,他把逃逸的角色搞错了,应该是\。考虑到我是第一个回应他应该以某种身份使用\的人,我觉得这不值得投反对票。是的,但那是后来的事。顺便说一句,我没有投反对票,而是给了一个补偿;-)NOWDOCs是一个未被充分利用的PHP特性