如何解码JavaScript的URL?

时间:2014-03-22 20:17:38

标签: javascript php html utf-8

解码以下用于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>

3 个答案:

答案 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>