2017-03-10 59 views
1

我正在基於php的多語言網站。轉義希伯來語PHP和JavaScript雙引號

對於支持多種語言,我使用如下所示的本地化文件。通過像下面雙向使用

[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"/> 

[Java腳本]

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

當我最好的希伯來文工作的問題發生。

希伯來語坦桑尼亞語的「電子郵件」一詞有雙引號。

我試圖逃避雙引號。

爲了逃避雙引號,

PHP需要一個反斜槓,和javascript需要一個越來越相互反斜槓。

所以我在雙引號前加了3個反斜槓。

它顯示在JavaScript警報上propery。但對HTML反斜槓(對於JavaScript)出現..

是的,我知道使用單引號可以簡單地解決這個問題。

但在本地化文件(某些法文單詞使用單引號)時發生異常。

任何人都可以幫忙嗎?任何線索歡迎。

+0

如果你把所有的翻譯在數組這將是一個容易得多。然後,您可以使用'json_encode()'將該數組正確地發送給JavaScript。你可以使用'alert(<?= json_encode(WORD_EMAIL);?> +「required」)來嘗試。當然,輸出到html時,你需要'htmlspecialchars()'。 – jeroen

+0

安息日沙洛姆goyim也許這將幫助你

http://php.net/manual/en/function.htmlspecialchars.php –

回答

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方法雖然有點瑕疵; 「אִימֵיְילrequired」*似乎是一個非常不足的本地化。您將需要查看適當的工具,如gettext和其實現/類似Javascript的。

*谷歌翻譯,我不說話希伯來語......