0

我在我的 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 上使用正则表达式来替换所有'标记,\'但是由于各种原因这很难。没有什么我能做的吗?类似于 perlq()函数的东西......

4

7 回答 7

6

试过这样做吗?

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

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

于 2009-11-19T01:22:07.547 回答
3

我使用 json_encode()。

http://ie2.php.net/manual/en/function.json-encode.php

于 2009-11-19T01:35:52.370 回答
2

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

addcslashes($str, "\"\r\n\\\t/\0..\37");
于 2009-11-19T01:23:40.703 回答
1

你确定吗?是不是:

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

为了防止双重 ' 尝试:

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

或者

$foo = '\\\'Dis here be a "string"';
于 2009-11-19T01:21:40.090 回答
1

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

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

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

于 2009-11-19T01:48:28.110 回答
0

由于您在 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 字符串。

于 2009-11-19T01:36:18.750 回答
0

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

试试这个片段,它工作得很好:

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

因为我总是在我的 PHP 脚本中连接到一个将文本直接传递到 Javascript 字符串的数据库,所以我依靠 real_escape_string 来完成我的脏活。addlashes() 不处理换行符,这些换行符有时会潜入我传递给 Javascript 的字符串中。

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

于 2013-01-31T20:51:39.840 回答