Как избежать Javascript кода, который отражен в PHP - PullRequest
2 голосов
/ 20 мая 2011

У меня есть этот код, который захвачен в объекте данных jquery со страницы php.

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

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

";

Проблема в том, что они не экранированы.Я попытался использовать / ', чтобы убежать, но это приводит к ошибке.Я уверен, что я делаю это неправильно, кто-нибудь знает, где поставить / 'вместо'?

Ответы [ 6 ]

4 голосов
/ 20 мая 2011

Вы можете использовать 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 голос
/ 08 сентября 2011

используйте функцию json_encode в php, она ведет себя как функция 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();
1 голос
/ 20 мая 2011

Ваши апострофы на самом деле выглядят хорошо.Но в строке в двойных кавычках PHP будет оценивать любую строку, начинающуюся со знака доллара, как переменную и не даст желаемого результата.Попробуйте заменить jquery экземпляры $ на \$.Как это:

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

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

";
0 голосов
/ 20 мая 2011

Используйте одинарные кавычки для вашей конструкции строки. Используйте двойные кавычки, только если вы специально включили переменные, которые вы хотите оценить. PHP пытается оценить все эти $ ссылки, которые у вас есть. Используя одинарные кавычки, вы избежите многих проблем с экранированием.

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

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

';
0 голосов
/ 20 мая 2011

PHP будет пытаться расширить переменные $name, которые встречаются в строках, заключенных в двойные кавычки.Поскольку $d выглядит как переменная для интерпретатора PHP, он попытается заменить его значением переменной.

Предполагая, что вы нигде не определили $d, это приведет к пустому пространству и, возможно, уведомлению (если вы используете уровень ошибки E_NOTICE).

Чтобы этого не произошло, избегайте знака доллара с обратной косой чертой (замените $ на \$)

0 голосов
/ 20 мая 2011

Вам нужно будет использовать \ перед всеми ' с.

Однако, это озадачивает, почему вы чувствуете, что вам нужны экранирующие персонажи? Похоже, вы просто выводите этот вывод, если он находится между <script /> тегами, с вами все будет в порядке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...