perl, javascript - как сделать backscape любых специальных символов, печатающих на perl, в javascript - PullRequest
0 голосов
/ 07 июля 2011

как я могу сделать backescape для любых специальных символов в Perl, которые я печатаю для кодирования JavaScript (например, $ asdf, $ asdf1, $ asdf2, $ asdf3, $ KEY_ID)?

if ($USER_GROUPS_OKAY == 1)
{
    print qq|
    <script>
        var params = \$("#USER_INPUT_FORM").serializeArray();
        params.push({ name: 'menu_mode', value: 'VIEW_IV' });
        params.push({ name: 'KEY_ID_VALID', value: '$KEY_ID' });
        params.push({ name: 'SOURCE_P_NAME', value: '$asdf' });
        params.push({ name: 'DESTINATION_P_NAME', value: '$asdf1' });
        params.push({ name: 'SOURCE_D_NAME', value: '$asdf2' });
        params.push({ name: 'DESTINATION_D_NAME', value: '$asdf3' });                     
        \$.get("cgi_scripts/$0",params,function(data){\$("#graphs").html(data)});
    </script>
|;
}

Примечание: $ asdf, $ asdf1, $ asdf2, $ asdf3 являются переменными perl - если определено $ asdf = qq | 'helo world% &% ^ & * ^' |, это может привести к потере кода

Ответы [ 2 ]

2 голосов
/ 07 июля 2011

Вы никогда не поймаете все, не переписав кодировщик JSON.См. encode_json в формате JSON (из CPAN).

0 голосов
/ 07 июля 2011

Внутри двойной кавычки (то есть " или qq) вы можете убежать с косой чертой \, однако, если это сбивает с толку из-за других значений / использования слеша, я бы порекомендовал изменить части выражения которые не нуждаются в интерполяции в строки в одинарных кавычках (например, ' или q) и объединяют их с помощью оператора cat "точка" (.).

Если я правильно вас прочитал, единственная переменная на стороне Perl, которая вам нужна, это $0, правильно? Кроме того, сбежавшие единичные доллары предназначены только для Perl, поэтому мы можем удалить их из одинарных кавычек.

if ($USER_GROUPS_OKAY == 1)
{
    print q|
      <script>
        var params = $("#USER_INPUT_FORM").serializeArray();
        params.push({ name: 'menu_mode', value: 'VIEW_IV' });
        params.push({ name: 'KEY_ID_VALID', value: '$KEY_ID' });
        params.push({ name: 'SOURCE_P_NAME', value: '$asdf' });
        params.push({ name: 'DESTINATION_P_NAME', value: '$asdf1' });
        params.push({ name: 'SOURCE_D_NAME', value: '$asdf2' });
        params.push({ name: 'DESTINATION_D_NAME', value: '$asdf3' });                     
        $.get(
    | . qq|
        "cgi_scripts/$0"
    | . q|
        ,params,function(data){$("#graphs").html(data)});
      </script>
    |;
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...