Каков наилучший способ декодирования следующего 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>
Хотя addslashes
будет работать в этом случае, я предпочитаю делать более сильные действия и запускать все через JSON.
<?php
var $mystring = "A really complex string\r\nWith line breaks";
?>
<script>
var jsstring = <php echo json_encode($mystring); ?>;
</script>
Поскольку двойная кавычка не является юридическим символом URL, но одинарная кавычка, вы можете очертить строку javascript двойными кавычками, и вы должны быть в безопасности. В строке не должно быть никаких двойных кавычек, потому что это не юридический символ URL, тогда как одиночная кавычка является юридическим символом URL.
var options = {
prefilltext: "<?php echo $postText;?>",
};
Строка может быть правильно подготовлена для того, чтобы быть в URL-адресе с PHP urlencode()
, хотя похоже, что она уже была закодирована из-за уже существующего в ней %20
.
Вы также можете быть заинтересованы в addslashes()
PHP addslashes()
.
$postText
содержит двойные кавычки? Должны быть некоторые побеги, одиночные или двойные.
urlencode()
позаботится о двойных кавычках, если строка еще не была безопасна для URL, хотя, похоже, так и есть из-за %20
который уже находится в ней.
Проблема заключается не в том, что вы должны декодировать URL-адрес, так что он должен иметь одинарные кавычки, чтобы избежать ошибки синтаксиса javascript.
prefilltext: 'a'b' // error
prefilltext: 'a\'b' // ok
Чтобы убежать, вы можете использовать
echo str_replace('\'', '\\\'', $myString);