在 php 和 javascript 上转义希伯来语双引号

escape Hebrew double quote on both php and javascript

我正在基于 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;
}

问题发生在我处理希伯来语时。

希伯来语翻译的 "e-mail" 这个词有一个双引号。

我试图转义双引号。

要转义双引号,

PHP 需要一个反斜杠,javascript 还需要一个反斜杠。

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

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

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

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

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

您始终需要为要嵌入它们的上下文对值进行编码或转义。将任何内容放入 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 和 implementations/analogues 的 Javascript。

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