解码以下用于JavaScript的URL的最佳方法是什么?
URL:
https://www.example.com/post.php?v=1&text=it's-me&20hello%0Aworld%0A
目前,如果网址中存在'
,则会导致错误,并且也不会解释换行符(空白行)。
代码:
<?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>
答案 0 :(得分:0)
问题不在于您必须解码网址,而是必须使用单引号进行转义才能避免javascript语法错误。
prefilltext: 'a'b' // error
prefilltext: 'a\'b' // ok
要逃避,您可以使用
echo str_replace('\'', '\\\'', $myString);
答案 1 :(得分:0)
因为双引号不是合法的URL字符,而是单引号,您可以用双引号描述您的javascript字符串,您应该是安全的。字符串中不应该有任何双引号,因为它不是合法的URL字符,而单引号是合法的URL字符。
var options = {
prefilltext: "<?php echo $postText;?>",
};
可以使用PHP的urlencode()
正确准备字符串,但由于%20
已经在其中,因此可能已经编码了。
您可能也对PHP's addslashes()
功能感兴趣。
答案 2 :(得分:0)
虽然addslashes
在这种情况下会起作用,但我更喜欢采取更强大的行动并通过JSON运行所有内容。
<?php
var $mystring = "A really complex string\r\nWith line breaks";
?>
<script>
var jsstring = <php echo json_encode($mystring); ?>;
</script>