2017-03-10 1 views
1

Je travaille sur un site multilingue basé sur php.échapper hébreu guillemet double à la fois sur php et javascript

Pour prendre en charge plusieurs langues, j'utilise le fichier de localisation comme ci-dessous.

[localize.en-US.php]

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

. 
. 
. 

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

. 
. 
. 

mots définis utilisés par les deux sens comme ci-dessous.

[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; 
} 

Le problème est survenu lorsque j'avais travaille sur l'hébreu.

Le mot "e-mail" de la traduction hébraïque a une double citation.

J'ai essayé d'échapper à la double citation.

Pour échapper guillemet,

PHP besoin d'un anti-slash et javascript avez besoin d'un plus et un autre pour backslash. J'ai donc ajouté 3 barres obliques inverses avant de faire un double guillemet.

il montre une propriété sur l'alerte javascript. mais sur backslash HTML (pour javascript) apparaît ..

Oui, je sais en utilisant guillemet simple peut résoudre cela simplement.

Mais il se produit une exception parmi les fichiers de localisation (certains mots français utilisent des guillemets simples).

Quelqu'un peut-il vous aider? Toutes les idées sont les bienvenues.

+0

Il serait beaucoup plus facile si vous mettez toutes les traductions dans un tableau. Ensuite, vous pouvez envoyer ce tableau correctement en javascript en utilisant 'json_encode()'. Vous pouvez essayer cela en utilisant 'alert ( +" Required. ");'. Et bien sûr, lors de la sortie en HTML, vous avez besoin de 'htmlspecialchars()'. – jeroen

+0

shabbat shalom goyim peut-être cela va vous aider

http://php.net/manual/fr/fonction.htmlspecialchars.php –

Répondre

1

Vous avez toujours besoin d'encoder ou d'échapper des valeurs pour le contexte dans lequel vous les incorporez. Lorsque vous mettez quelque chose en HTML, vous devez l'encoder en HTML, sauf si vous voulez accidentellement les valeurs interprétées en HTML. Lorsque vous mettez quoi que ce soit dans le code source Javascript, vous devez échapper correctement là-bas, pour lequel JSON-encodage se trouve être la bonne technique:

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

Voir aussi The Great Escapism (Or: What You Need To Know To Work With Text Within Text).

Je dirais que votre approche i18n de très imparfait cependant; "אִימֵיְיל required" * semble être une localisation très insuffisante. Vous voudrez regarder dans les outils appropriés comme gettext et implémentations/analogues pour Javascript.

* traduction de Google, je ne parle pas l'hébreu ...