JavaScript或PHP中的转义撇号

JavaScript或PHP中的转义撇号,php,javascript,escaping,Php,Javascript,Escaping,我在PHP中有一个foreach循环: var circle_<?php echo $x; ?> = '<?php echo $c; ?>'; var循环=”; 它以JavaScript格式返回: var circle_0 = '<p class="medium">With us, you can customize more than just a closet.</p>'; var circle_1 = '<p class="med

我在PHP中有一个foreach循环:

var circle_<?php echo $x; ?> = '<?php echo $c; ?>';
var循环=”;
它以JavaScript格式返回:

var circle_0 = '<p class="medium">With us, you can customize more than just a closet.</p>';

var circle_1 = '<p class="medium">We are boutique condo builders who love what we do.</p>';

var circle_2 = '<p class="medium">who says condos can't be spacious?<br/></p>';
var circle_0='

有了我们,您可以定制的不仅仅是一个壁橱。

'; var circle_1='

我们是热爱我们所做工作的精品公寓建筑商。

'; var circle_2='

谁说公寓不能宽敞?

如您所见,圆圈_2在字符串中有一个撇号,因此它破坏了脚本:

未捕获的语法错误:意外标记非法

我将使用什么过滤器来修复此问题(PHP或JavaScript)?

使用,您可以尝试:

  <?php echo str_replace("'", "\'",$c);

PHP addslashes()函数将帮助您:

不要为此使用
foreach
循环,也不要使用
addslashes
或任何其他错误答案

按如下方式编写代码:

echo "var circle = ".json_encode($carray).';';
var circle = [
    '\'<p class="medium">With us, you can customize more than just a closet.</p>\'',
    '\'<p class="medium">We are boutique condo builders who love what we do.</p>\'',
    '\'<p class="medium">who says condos can't be spacious?<br/></p>\''
];
其中,
$carray
是当前使用
foreach()
循环以获取
$x
$c
的数组

这将创建如下所示的Javascript数组:

echo "var circle = ".json_encode($carray).';';
var circle = [
    '\'<p class="medium">With us, you can customize more than just a closet.</p>\'',
    '\'<p class="medium">We are boutique condo builders who love what we do.</p>\'',
    '\'<p class="medium">who says condos can't be spacious?<br/></p>\''
];
var循环=[
“\”

有了我们,您可以定制的不仅仅是衣柜。

\”, “\”

我们是热爱我们工作的精品公寓建筑商。

\”, “谁说公寓不能宽敞?” ];
然后可以访问元素,如
circle[0]
circle[1]


希望对您有所帮助。

使用了这种方法,而且效果很好,谢谢。请始终使用
json_encode()
从PHP程序生成Javascript数据。请看:出于好奇,您能否解释为什么它们是“错误答案”以及为什么您的方法是首选方法?我不是在和你争论,但我希望看到更多的理由/证据,因为我以前没有看到任何人提出过这种方法(同样没有争论或不同意,但我希望看到支持这一点的东西)。我可以理解这一切是否都来自JSON响应,但我想知道您是否可以提供更多解释。对于其他人来说,我认为我的问题的答案是——它更易于维护,更易于阅读,并且转义是为您完成的。它允许您使用js来操作js,而不是使用更多分散的编码语言(尽管仍然有一个echo语句),它还将一些处理推送到客户机而不是服务器(foreach就是这种情况)——但不确定这对大型阵列会有什么性能影响。希望Spudley可以添加更多内容。@TommyBs:
addslashes
早在JSON发明之前就被放入PHP语言中,并没有逃逸JSON所需的所有字符。因此,尽管它可能适用于问题中给出的示例,但不能保证它在所有情况下都有效;例如,如果他决定用换行符格式化他的HTML。此外,问题表明他正在使用
foreach
循环为PHP数组中的每个元素生成单独的命名javascript变量。这不是最佳做法;最好输出一个Javascript数组。只需一个
json\u encode()
调用即可。@TommyBs-扩展您的评论“它将处理推送到客户端”-这不是真的。Javascript拥有大量命名变量的开销比数组中的命名变量要高,特别是当他的JS代码试图通过使用子字符串来构建变量名来访问变量时。考虑到他格式化名字的方式,我认为情况会是这样,但这对他的JS性能来说肯定比一个简单的数组更糟糕。感谢Spudleth的详细解释,这不一定会起作用,因为它还会在css类属性中添加斜杠,例如

@TommyBs是的,你是对的。没有提到这个案子。无论如何,Spudley的json_encode()方法确实比任何手工制作的引号好。