Как декодировать URL для JavaScript?

0

Каков наилучший способ декодирования следующего URL-адреса для использования с JavaScript?

URL:

https://www.example.com/post.php?v=1&text=it's-me&20hello%0Aworld%0A

В настоящее время, если ' присутствует" в URL-адресе, это вызывает ошибку, а также строки новой строки (пустые строки) также не интерпретируются.

Код:

<?php
$postText = $_GET["text"]; 
?>  

<!DOCTYPE HTML>
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    </head>
    <body>
    <script type="text/javascript">
      var options = {
        prefilltext: '<?php echo $postText;?>',
      };
    </script>
    </body>
    </html>
Теги:
utf-8

3 ответа

0

Хотя addslashes будет работать в этом случае, я предпочитаю делать более сильные действия и запускать все через JSON.

<?php
var $mystring = "A really complex string\r\nWith line breaks";
?>

<script>
  var jsstring = <php echo json_encode($mystring); ?>;
</script>
0

Поскольку двойная кавычка не является юридическим символом URL, но одинарная кавычка, вы можете очертить строку javascript двойными кавычками, и вы должны быть в безопасности. В строке не должно быть никаких двойных кавычек, потому что это не юридический символ URL, тогда как одиночная кавычка является юридическим символом URL.

var options = {
    prefilltext: "<?php echo $postText;?>",
  };

Строка может быть правильно подготовлена для того, чтобы быть в URL-адресе с PHP urlencode(), хотя похоже, что она уже была закодирована из-за уже существующего в ней %20.

Вы также можете быть заинтересованы в addslashes() PHP addslashes().

  • 0
    Что если $postText содержит двойные кавычки? Должны быть некоторые побеги, одиночные или двойные.
  • 0
    Двойные кавычки не являются допустимыми символами в URL. PHP urlencode() позаботится о двойных кавычках, если строка еще не была безопасна для URL, хотя, похоже, так и есть из-за %20 который уже находится в ней.
Показать ещё 1 комментарий
0

Проблема заключается не в том, что вы должны декодировать URL-адрес, так что он должен иметь одинарные кавычки, чтобы избежать ошибки синтаксиса javascript.

prefilltext: 'a'b'  // error
prefilltext: 'a\'b' // ok

Чтобы убежать, вы можете использовать

echo str_replace('\'', '\\\'', $myString);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню