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

时间:2011-05-20 00:33:26

标签: php javascript jquery ajax escaping

我有这个代码,它是从php页面的jquery Data对象中捕获的。

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

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

";

问题是,没有逃脱。我尝试使用/'来逃避,但它出现了错误。我确信我做错了,有谁知道在哪里放'/而不是'?

6 个答案:

答案 0 :(得分:4)

您可以使用php nowdoc而不是引号来简化操作:

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

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

然后使用你想要的任何内容(引用或引用)。当然,这是未解析的,所以如果$ d实际上指的是php var,那么你就会遇到问题。

答案 1 :(得分:1)

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

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

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

";

答案 2 :(得分:1)

在php中使用json_encode函数,它的行为类似于rails中的escape_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();

答案 3 :(得分:-1)

您需要在所有\之前使用'

然而,这令人费解,为什么你觉得你需要逃脱角色?看起来你只是回显这个输出,如果它在<script />标签之间,你应该没问题。

答案 4 :(得分:-1)

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

假设您没有在任何地方定义$d,那将产生一个空白空间,并且可能会产生通知(如果您使用错误级别E_NOTICE)。

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

答案 5 :(得分:-1)

使用单引号进行字符串构造。当您专门包含要评估的变量时,仅使用双引号。 PHP正试图评估你在那里的所有$引用。通过使用单引号,您将避免许多转义问题。

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

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

';