PHP生成的javascript和引号
-
21-09-2019 - |
题
我产生在我的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的,以取代所有'
标志\'
但是这是很难因各种原因。是否有什么我可以做短的呢?一个类似于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代码。
由于使用在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字符串。
弗兰克农民的回答是有趣的,但它是逃避一些事情,并不需要进行转义,如标签。
试试这个片段,它工作得很好:
<script type="text/javascript">
alert("Hi!\n\tHi!\n<?php echo '\tHI!',"\\n\tHI!";?>");
</script>
由于我一直在通过文字直接转换成JavaScript字符串我的PHP脚本连接到数据库,我倚在real_escape_string做我肮脏的工作。和addslashes()不处理新行和那些有时潜入串我传递到的Javascript。
一个简单的$sql->real_escape_string($string)
让这一切更好,逃避任何数据库吐出成一个JavaScript友好的形式。
不隶属于 StackOverflow