【问题标题】:How to decode an URL for JavaScript?如何为 JavaScript 解码 URL?
【发布时间】:2014-03-22 20:17:38
【问题描述】:

解码以下 URL 以用于 JavaScript 的最佳方法是什么?

网址:

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>

【问题讨论】:

标签: javascript php html utf-8


【解决方案1】:

问题不在于您必须对 url 进行解码,而在于它必须转义单引号以避免 javascript 语法错误。

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

要逃跑,你可以使用

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

【讨论】:

    【解决方案2】:

    因为双引号不是合法的 URL 字符,但单引号是,你可以用双引号描述你的 javascript 字符串,你应该是安全的。字符串中不应有任何双引号,因为它不是合法的 URL 字符,而单引号是合法的 URL 字符。

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

    该字符串可以通过 PHP 的 urlencode() 正确准备在 URL 中,尽管它看起来可能已经被编码,因为 %20 已经在其中了。

    您可能还对PHP's addslashes() 功能感兴趣。

    【讨论】:

    • 如果$postText 包含双引号怎么办?必须有一些转义,无论是单人还是双人。
    • 双引号不是 URL 中的合法字符。如果字符串尚未对 URL 设置安全,PHP 的 urlencode() 会处理双引号,尽管它看起来已经是因为 %20 已经在其中了。
    • @Oriol - 在我对 PHP 的 urlencode()addslashes() 的回答中添加了一些注释。
    【解决方案3】:

    虽然addslashes 在这种情况下可以工作,但我更愿意采取更强有力的措施并通过 JSON 运行所有内容。

    <?php
    var $mystring = "A really complex string\r\nWith line breaks";
    ?>
    
    <script>
      var jsstring = <php echo json_encode($mystring); ?>;
    </script>
    

    【讨论】:

      猜你喜欢
      • 2016-09-07
      • 2021-12-17
      • 1970-01-01
      • 1970-01-01
      • 2011-05-16
      • 1970-01-01
      • 1970-01-01
      • 2015-03-03
      • 2012-05-02
      相关资源
      最近更新 更多