PHP生成的javascript和引号

时间:2009-11-19 01:18:37

标签: php javascript quotes quoting

我在我的PHP代码中生成了一些javascript,我需要为javascript变量分配一些php变量。不幸的是,有时我的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()函数的东西......

7 个答案:

答案 0 :(得分:4)

试过这样做?

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

请参阅:http://php.net/manual/en/function.addslashes.php

答案 1 :(得分:3)

答案 2 :(得分:2)

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

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

答案 3 :(得分:1)

你确定吗?不是吗:

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

为了防止双重'尝试:

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

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

答案 4 :(得分:1)

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

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

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

答案 5 :(得分: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字符串。

答案 6 :(得分:0)

弗兰克·法默的答案很有意思,但它正在逃避一些不需要转义的事情,比如标签。

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

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

由于我总是连接到我的PHP脚本中的数据库,直接将文本传递给Javascript字符串,我依靠real_escape_string来完成我的脏工作。 addslashes()不处理换行符,有时会隐藏在我传递给Javascript的字符串中。

一个简单的$sql->real_escape_string($string)可以让一切变得更好,无论数据库吐出什么都是Javascript友好的形式。