【问题标题】:PHP-generated javascript and quote marksPHP 生成的 javascript 和引号
【发布时间】:2010-12-18 03:14:25
【问题描述】:

我在我的 PHP 代码中生成了一些 javascript,我需要将一些 php 变量分配给 javascript 变量。不幸的是,有时我的 PHP 变量包含引号。例如:

$foo = "'Dis here be a \"string\"";
print "<script type='text/javascript'>var foo = '{$foo}';</script>";

将生成一个 javascript 错误,因为生成的 javascript 将如下所示:

<script type='text/javascript'>var foo = '"'Dis here be a \"string\"';

我知道我可以在 $foo 上使用 regexp 将所有 ' 标记替换为 \' ,但由于各种原因,这很难。没有什么我能做的吗?类似于 perl q() 函数的东西...

【问题讨论】:

  • 这些“各种原因”有哪些?
  • 你打开了魔术引号吗?这可能是问题所在。
  • 各种原因是这个js是由smarty模板生成的,smarty不允许你使用完整的php,但是{$foo|addslashes}可以解决问题

标签: php javascript quotes quoting


【解决方案1】:

你确定吗?是不是:

var foo = ''Dis here be a "string"'

为了防止双重'尝试:

$foo = "\'Dis here be a \"string\"";

$foo = '\\\'Dis here be a "string"';

【讨论】:

    【解决方案2】:

    试过了吗?

    $foo = "'Dis here be a \"string\"";
    echo '<script type="text/javascript">var foo = "'.addslashes($foo).'";</script>';
    

    见:http://php.net/manual/en/function.addslashes.php

    【讨论】:

    • Addslashes() 在这种情况下就足够了,但不会转义 每个 可能会破坏 js 字符串的字符。
    • addslashes 是我一直在寻找的,现在似乎可以工作。
    • @Frank 是对的,但它不会考虑与 javascript 字符串相关的所有内容。
    【解决方案3】:

    这应该是朝着正确方向迈出的一步:

    addcslashes($str, "\"\r\n\\\t/\0..\37");
    

    【讨论】:

      【解决方案4】:

      【讨论】:

        【解决方案5】:

        由于您在 JavaScript 中使用最终值,我将使用 json_encode:

        $foo = "'Dis here be a \"string\"";
        print "<script type='text/javascript'>var foo = " . json_encode($foo) . ";</script>";
        

        它会正确输出:

        <script type='text/javascript'>var foo = "'Dis here be a \"string\"";</script>
        

        请注意,我没有在 json_encode 函数周围加上额外的引号。它将自动添加必要的引号使其成为有效的 JavaScript 字符串。

        【讨论】:

          【解决方案6】:

          另外值得注意的是,您可以将 PHP 文件用作 JavaScript 文件

          <script type="text/javascript" src="js/main.php"></script>
          

          您可以在该文件中执行 PHP 代码,并通过从 PHP 回显输出 JavaScript 代码。

          【讨论】:

            【解决方案7】:

            Frank Farmer 的回答很有趣,但它转义了一些不需要转义的东西,比如标签。

            试试这个 sn-p,效果很好:

            <script type="text/javascript">
                alert("Hi!\n\tHi!\n<?php echo '\tHI!',"\\n\tHI!";?>");
            </script>
            

            由于我总是在我的 PHP 脚本中连接到将文本直接传递到 Javascript 字符串的数据库,因此我依靠 real_escape_string 来完成我的繁琐工作。 addlashes() 不处理换行符,这些换行符有时会潜入我传递给 Javascript 的字符串中。

            一个简单的$sql-&gt;real_escape_string($string) 让一切变得更好,将数据库输出的任何内容转义为对 Javascript 友好的形式。

            【讨论】:

              猜你喜欢
              • 2018-04-12
              • 2018-06-16
              • 2012-02-05
              • 2011-04-08
              • 1970-01-01
              • 2020-09-14
              • 2013-06-07
              • 1970-01-01
              • 2011-06-02
              相关资源
              最近更新 更多