[英]PHP-generated javascript and quote marks
我在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()
函数...
试图这样做吗?
$foo = "'Dis here be a \"string\"";
echo '<script type="text/javascript">var foo = "'.addslashes($foo).'";</script>';
我使用json_encode()。
这应该是朝正确方向迈出的一步:
addcslashes($str, "\"\r\n\\\t/\0..\37");
你确定吗? 是不是:
var foo = ''Dis here be a "string"'
为了防止双重'尝试:
$foo = "\'Dis here be a \"string\"";
要么
$foo = '\\\'Dis here be a "string"';
还值得注意的是,您可以将PHP文件用作JavaScript文件
<script type="text/javascript" src="js/main.php"></script>
您可以在该文件中执行PHP代码,并通过从PHP回显输出JavaScript代码。
弗兰克·法默(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友好形式。
由于您在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字符串。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.