【问题标题】:Language PHP array - elegant way to pass to Javascript语言 PHP 数组 - 传递给 Javascript 的优雅方式
【发布时间】:2013-09-26 14:35:34
【问题描述】:

我有一个包含字符串的数据库以及该字符串所属的语言。一个字符串有一个唯一的名称,我用它来识别它,然后是每种语言的翻译。

使用 PHP,我从数据库中获取这些信息并将其存储在一个关联数组中,例如:

$languages['strings']['lang']['unique_string_name'] = $translation;

现在,由于我也希望翻译我的 Javascript 代码,因此我需要将其传递给。我已经尝试在 JSON 中执行此操作,但有些 $translation 有引号和双引号,要转义并使其全部正确是地狱般的 - 因为转义只会转义整个 JSON 字符串,而不仅仅是翻译。

所以,我所做的是循环整个数组并再次在 Javascript 关联数组中回显 $translation,但这次使用了斜杠 - 只有翻译。

但是,如果我查看源代码,我会看到 600 行 Javascripts 条目,每个翻译一个(当然,这没有什么奇怪的,只是很丑)。

我想知道是否有一种更简洁的方法可以将此转换数组传递给我的 Javascript 代码,而无需循环 PHP 数组并将其回显到 JS 变量。

感谢您的时间和回答!

【问题讨论】:

  • 你是怎么做 JSON 的?您是否为此使用了实际的 PHP 和 Javascript 函数? $str = json_encode($languages); 用于 PHP 和 var languages = JSON.parse(str); 用于 Javascript 应该可以工作。
  • var languages = <?php echo json_encode($languages); ?>; - 完成。
  • php.net/json_encode 是你的朋友。

标签: javascript php json escaping translation


【解决方案1】:

你真正需要的是:

<script type="text/javascript">
var languages = <?php echo json_encode($languages); ?>;
</script>

你最终会在 JS 中得到与你的 PHP 数组完全相同的副本,所以

echo $languages['strings']['lang']['unique_string_name']; // PHP
alert(languages.strings.lang.unique_string_name); // JS

都会显示相同的翻译。

【讨论】:

  • 马克你好!感谢您的回答,但正如我在问题中所说,我有一些带单引号和双引号的字符串。这样做最终会得到“意外的标识符 X”。由于 JSON 数组开头的名称/标识符位于“”(双引号)之间,因此 JSON 不接受其任何没有转义的双引号值。如果我 scape 整个 JSON 数组,我最终会遇到相同类型的错误。
  • 这就是你使用 json_encode 的原因。它会将传入的数据结构中的所有内容转换为有效的 javascsript,包括转义任何必要的 JS 元字符。如果您的意思是您的某些数组 KEYS 有引号,那么您将在访问数组时使用 var['key with \' quote'] 类型表示法。 JSON 只会处理 PHP->javascript 转换。由你来编写适当的 JS 代码来处理数据结构。
  • 你说的太对了。我不知道我以前做过什么,因为我总是出错。当然,我犯了一些错误:P 感谢您的时间,并对我的菜鸟问题感到抱歉!我不知道我得到的错误发生了什么!再次感谢。将问题标记为已接受。
猜你喜欢
  • 1970-01-01
  • 2014-09-17
  • 2017-11-10
  • 1970-01-01
  • 1970-01-01
  • 2011-06-07
  • 2011-05-16
  • 2012-06-26
  • 1970-01-01
相关资源
最近更新 更多