我产生在我的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>';

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

其他提示

这应该是在正确方向上的步骤:

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友好的形式。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top