代码之家  ›  专栏  ›  技术社区  ›  Ben Reisner

php:我应该如何转义将要变成javascript字符串的字符串?

  •  0
  • Ben Reisner  · 技术社区  · 14 年前

    如何将要转换为javascript字符串的字符串转义?urlencode(x)?str_replace(“”、“\”,x)?

    4 回复  |  直到 14 年前
        1
  •  2
  •   RobertPitt    14 年前

    使用 json_encode

    所以你可以

    $page_params = array(
        'user_logged_in' => $suer->IsActive(),
        'some_string' => "sajdhf\"test''z\'\fsdf"
        'ts' => time()
    );
    
    $page_params = json_encode($page_params);
    

    在你的模板里你可以

    var page_params = <?php echo $page_params ?>;
    

    女巫会产生

    var page_params = {"user_logged_in":false,"some_string":"sajdhf\"test''z\'\fsdf","ts":2452346543}
    

    这样,您可以将多个变量设置为1个字符串,并通过json库进行转义

        2
  •  1
  •   Gumbo    14 年前

    使用 json_encode 如果可用(从PHP5.2开始):

    var str = <?php echo json_encode($str); ?>;
    

    否则你可以使用 rawurlencode 然后用 decodeURIComponent :

    var str = decodeURIComponent("<?php echo rawurlencode($str); ?>");
    
        3
  •  0
  •   John Kugelman Syzygies    14 年前

    有几件事你应该做,以逃避你的投入。至少do 1:

    1. 这个 addslashes 函数将在单个( ' )再加倍( " )引号、反斜杠( \ )和NUL(NUL) \0 )

    2. 为了更安全起见,请将整个脚本部分包装在cdata标记中,这样您就可以将脚本验证为xhtml,即使它包含 < > :

      <script>
      // <![CDATA[
      
          alert("<?php echo addslashes($message); ?>");
      
      // ]]>
      </script>
      
    3. 如果你是 真正地 偏执狂你会打破任何 </script> ]]> 因为它们会干扰html解析器。例如,替换 </Script & Gt; 具有 <"+"/script> ] 具有 ]]"+"> . 同样,这取决于你对保护自己免受恶意/可疑用户输入的分析。

        4
  •  -1
  •   zneak    14 年前

    addslashes 应该没事的。