繁体   English   中英

PHP生成的javascript和引号

[英]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>';

请参阅: 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代码。

弗兰克·法默(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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM