【问题标题】:magento escape string for JavaScript part 2JavaScript 第 2 部分的 magento 转义字符串
【发布时间】:2011-01-30 13:43:11
【问题描述】:

这是一个后续 magento escape string for javascript

我接受了@AlanStorm 建议使用 json_encode 转义字符串文字。

但是我现在对这个解决方案有一个新问题。

当试图转义包含 /'s 的 URL 以呈现为 JavaScript 的字符串文字时,json_encode 似乎在 /'s 前面添加了多余的 \'s。

这里有什么新建议吗?

解决方案应该接受一个字符串变量并返回一个字符串,该字符串将被正确地评估为 JavaScript 中的字符串文字。 (我不在乎它是用单引号还是双引号括起来 - 尽管我更喜欢单引号。而且它还必须支持字符串中的换行符。)

谢谢

【问题讨论】:

  • 更多信息:<?php $v=array('a'=>'/');echo json_encode($v); ?> 怎么会导致 {"a":"\/"} ?这不仅仅是 json_encode 中的错误吗?

标签: php magento escaping json


【解决方案1】:

更多信息:'/');echo json_encode($v); ?> 结果 {"a":"\/"} ?

详情可以在这里找到http://bugs.php.net/bug.php?id=49366

解决此问题:

str_replace('\\/', '/', $jsonEncoded);

对于您的问题,您可以执行类似的操作

$jsonDecoded = str_replace(array("\\/", "/'s"), array("/", "/\'s"), $jsonEncoded);

希望对你有帮助

【讨论】:

  • 我不喜欢在我需要这样做的每个地方都进行替换的想法。但它可以在包装器中使用。 alst 在您提供的链接的末尾,它说 json_encode 有一个 JSON_UNESCAPED_SLASHES 选项,但我不确定它是什么版本。我想我会为此使用自己的 Wrapper。
【解决方案2】:

当我检查JSON format 时,我看到允许对solidi 进行转义,因此json_encode 实际上工作正常。


(来源:json.org)

satrun77 发布的错误链接甚至说“转义斜线并不正确。”

如果您坚持不使用并且(在这种情况下)肯定会使用字符串,您可以使用这样的 hack:

echo '["', addslashes($string), '"]';

显然这对更复杂的结构没有帮助,但幸运的是,您使用的是高度可修改的 Magento。将lib/Zend/Json/Encoder.php 复制到app/core/local/Zend/Json/Encoder.php(形成覆盖)并修复它的_encodeString 方法。

【讨论】:

  • 我接受,这不是 json_encode 中的错误。所以很明显我不应该修复 json_encode - 正如他们所说,如果它没有坏,儿子就不要修复它......所以如果是这种情况,那么使用 json_encode 不是我需要的,所以它回到第一,什么我应该使用输出正确转义的 javascript 文字字符串吗?我最终是否必须编写自己的 toJSStringLiteral() ?
  • 这是一个棘手的问题。我想如果我们要完全客观,那么错误在于无法处理转义字符的 JSON 解码器 - 这些是应该修复的。
  • 如果我想将它用于 jason 对象,那将是正确的。我只需要为 javascript 呈现一个字符串文字。它实际上不是 JSON,最多可能与 JSON 相关
  • 那么addslashes()是你的朋友。 ;-)
猜你喜欢
  • 1970-01-01
  • 2011-03-20
  • 1970-01-01
  • 2021-08-12
  • 2015-01-19
  • 1970-01-01
  • 2016-03-10
  • 2017-12-28
  • 1970-01-01
相关资源
最近更新 更多