JavaScript或PHP中的转义撇号
我在PHP中有一个foreach循环: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
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()方法确实比任何手工制作的引号好。