我在我的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()
函数的东西......
答案 0 :(得分:4)
试过这样做?
$foo = "'Dis here be a \"string\"";
echo '<script type="text/javascript">var foo = "'.addslashes($foo).'";</script>';
答案 1 :(得分:3)
我使用json_encode()。
答案 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友好的形式。