【问题标题】:escape Hebrew double quote on both php and javascript在 php 和 javascript 上转义希伯来语双引号
【发布时间】:2017-03-10 08:25:03
【问题描述】:

我正在开发基于 php 的多语言网站。

为了支持多语言,我使用如下本地化文件。

[localize.en-US.php]

$lang_code = "en-US";
$is_rtl = false;

.
.
.

define("WORD_EMAIL", "e-mail");
define("WORD_NAME", "name");

.
.
.

以下两种方式使用的定义词。

[HTML]

<?=WORD_EMAIL?> : <input type="text" name="email"/>
<?=WORD_NAME?> : <input type="text" name="name"/>

[Javascript]

if(frm.email.value==="") {
 alert("<?=WORD_EMAIL?> required.");
 return false;
}

问题发生在我研究希伯来语时。

希伯来语翻译中的“电子邮件”一词有双引号。

我试图转义双引号。

要转义双引号,

PHP 需要一个反斜杠,而 javascript 需要一个又一个反斜杠。

所以我在双引号前加了 3 个反斜杠。

它在 javascript 警报上显示属性。但在 HTML 反斜杠(用于 javascript)上出现..

是的,我知道使用单引号可以简单地解决这个问题。

但在本地化文件中出现异常(某些法语单词使用单引号)。

有人可以帮忙吗?欢迎提供任何线索。

【问题讨论】:

  • shabbat shalom goyim 也许这会对你有所帮助

    php.net/manual/en/function.htmlspecialchars.php
  • 如果你把所有的翻译放在一个数组中会容易很多。然后您可以使用json_encode() 将该数组正确发送到javascript。您可以使用alert(&lt;?= json_encode(WORD_EMAIL); ?&gt; + " required."); 进行尝试。当然,当输出到 html 时,您需要 htmlspecialchars()

标签: javascript php escaping hebrew


【解决方案1】:

您总是需要对嵌入它们的上下文的值进行编码或转义。将任何内容放入 HTML 时,您需要对其进行 HTML 编码,除非您不小心希望将值解释为 HTML。将任何内容放入 Javascript 源代码时,您需要在此处正确转义,而 JSON 编码恰好是正确的技术:

<?= htmlspecialchars(WORD_EMAIL, ENT_COMPAT, 'UTF-8'); ?> : <input type="text" name="email"/>
alert(<?= json_encode(WORD_EMAIL); ?> + " required.");

另见The Great Escapism (Or: What You Need To Know To Work With Text Within Text)

我认为您的i18n 方法存在很大缺陷; “需要אִימֵיְיל”* 似乎是一个非常不充分的本地化。您将需要研究适当的工具,例如 gettext 和 Javascript 的实现/类似物。

* 谷歌翻译,我不会说希伯来语……

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-24
    • 1970-01-01
    • 2013-08-07
    • 1970-01-01
    • 2011-01-03
    • 2013-12-26
    相关资源
    最近更新 更多