如何转义在PHP中回响的Javascript代码
我在php页面的jquery数据对象中捕获了这段代码如何转义在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=$(''{
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特性