PHP: Как я должен избежать строки, которая будет входить в строку Javascript? - PullRequest
0 голосов
/ 17 августа 2010

Как мне избежать строки, которая будет входить в строку Javascript? URLEncode (X)? str_replace ( " '", "\', X)

Ответы [ 4 ]

2 голосов
/ 17 августа 2010

использование json_encode

так что вы можете сделать

$page_params = array(
    'user_logged_in' => $suer->IsActive(),
    'some_string' => "sajdhf\"test''z\'\fsdf"
    'ts' => time()
);

$page_params = json_encode($page_params);

тогда в свой шаблон можно просто зайти

var page_params = <?php echo $page_params ?>;

ведьма выдаст

var page_params = {"user_logged_in":false,"some_string":"sajdhf\"test''z\'\fsdf","ts":2452346543}

таким образом, вы можете установить несколько переменных в 1 строку, а экранирование выполняется библиотекой Json

1 голос
/ 17 августа 2010

Используйте json_encode, если доступно (начиная с PHP 5.2):

var str = <?php echo json_encode($str); ?>;

В противном случае вы можете использовать rawurlencode и расшифровать его с помощью decodeURIComponent:

var str = decodeURIComponent("<?php echo rawurlencode($str); ?>");
0 голосов
/ 17 августа 2010

Есть пара вещей, которые вы должны сделать, чтобы избежать вашего ввода. Как минимум сделайте # 1:

  1. Функция addlashes добавит обратную косую черту перед одинарными (') и двойными (") кавычками, обратной косой чертой (\) и NUL (\0).

  2. Для большей безопасности оберните весь раздел сценария в теги CDATA, чтобы вы могли проверить сценарий как XHTML, даже если он содержит < или >:

    <script>
    // <![CDATA[
    
        alert("<?php echo addslashes($message); ?>");
    
    // ]]>
    </script>
    
  3. Кроме того, если вы на самом деле параноик, вы разбиваете все вхождения </script> и ]]>, поскольку они могут мешать анализатору HTML. Например, замените </script> на <"+"/script> и ]]> на ]]"+">. Опять же, это зависит от того, насколько вы уверены в защите от злонамеренного / сомнительного ввода пользователя.

0 голосов
/ 17 августа 2010

addslashes должно быть в порядке.

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