在 JavaScript 或 PHP 中转义撇号 [重复]
Posted
技术标签:
【中文标题】在 JavaScript 或 PHP 中转义撇号 [重复]【英文标题】:Escaping apostrophe in JavaScript or PHP [duplicate] 【发布时间】:2013-03-26 18:01:12 【问题描述】:我在 php 中有一个 foreach 循环:
var circle_<?php echo $x; ?> = '<?php echo $c; ?>';
它在 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>';
如您所见,circle_2 在字符串中有一个撇号,因此它破坏了脚本:
Uncaught SyntaxError: Unexpected token ILLEGAL
我会使用什么过滤器来解决这个问题(PHP 或 JavaScript)?
【问题讨论】:
始终使用json_encode()
从 PHP 程序生成 Javascript 数据。
见:addslashes()
【参考方案1】:
使用PHP,你可以试试:
<?php echo str_replace("'", "\'",$c);
【讨论】:
用了这个方法,效果很好,谢谢。【参考方案2】:PHP 的 addlashes() 函数会帮助你:http://php.net/manual/en/function.addslashes.php
【讨论】:
这不一定有效,因为它还会在他的 css 类属性中添加斜杠,例如 @TommyBs 是的,你是对的。没有提到这个案子。无论如何,Spudley 的 json_encode() 方法确实比任何手工转义的引号要好。【参考方案3】:不要为此使用 foreach
循环,也不要在此处使用 addslashes
或任何其他错误答案。
这样写你的代码:
echo "var circle = ".json_encode($carray).';';
其中$carray
是您当前与foreach()
循环以获取$x
和$c
的数组。
这将创建一个如下所示的 Javascript 数组:
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>\''
];
然后您可以通过circle[0]
、circle[1]
等方式访问元素。
希望对您有所帮助。
【讨论】:
出于好奇,您能否解释一下为什么它们是“错误答案”以及为什么您的答案是首选方法?我不是在和你争论,但我希望看到更多的推理/证据,因为我之前没有看到任何人建议过这种方法(再次不争论或不同意,但我希望看到一些支持这一点的东西)。我可以理解这是否全部来自 JSON 响应,但想知道您是否可以提供更多解释。 对于其他看到这个的人,我认为我的问题的答案是 - 它更易于维护,更易于阅读,并且为您完成了转义。它允许您使用 js 来操作 js,而不是使用更多穿插的编码语言(尽管仍然有一个 echo 语句)它还将一些处理推送到客户端而不是服务器(foreach 的情况) -不过,不确定这会对大型阵列产生什么性能影响。希望 Spudley 可以添加更多内容。 @TommyBs:addslashes
在 JSON 发明之前很久就被放入 PHP 语言中,并且不会转义 JSON 所需的所有字符。因此,尽管它可能适用于问题中给出的示例,但不能保证在所有情况下都适用;例如,如果他决定用换行符来格式化他的 html。此外,问题指出他正在使用foreach
循环为他的PHP 数组中的每个元素生成单独的命名javascript 变量。这不是最佳实践;最好输出一个Javascript数组。只需一个 json_encode()
呼叫即可。
@TommyBs - 扩展您的评论 “它将处理推送到客户端” - 不是真的。 Javascript 拥有大量命名变量的开销比将它们放在数组中要高,尤其是当他的 JS 代码尝试通过使用子字符串来构建变量名来访问变量时。考虑到他格式化名字的方式,我希望会是这样,但是对于他的 JS 性能而言,这肯定比一个简单的数组更糟糕。
感谢斯普德利的详细解释以上是关于在 JavaScript 或 PHP 中转义撇号 [重复]的主要内容,如果未能解决你的问题,请参考以下文章