2017-03-10 3 views
1

Ich arbeite auf mehrsprachige Website auf PHP basiert.Escape Hebräisch Doppelzitat auf beiden PHP und Javascript

Für mehrsprachige Unterstützung verwende ich Lokalisierungsdatei wie unten.

[localize.en-US.php]

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

. 
. 
. 

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

. 
. 
. 

Definierte Wörter wie unten durch zwei Weise verwendet.

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

Das Problem ist aufgetreten, wenn ich auf Hebräisch würde arbeiten.

Das Wort "E-Mail" der hebräischen Tanslation hat ein Doppelzitat darin.

Ich versuchte Doppelzitat zu entkommen.

doppelte Anführungszeichen zu entkommen,

PHP benötigen einen umgekehrten Schrägstrich und Javascript benötigt man mehr und einander für Backslash.

Also habe ich 3 Backslashes vor Doppelzitat hinzugefügt.

es zeigt propery auf javascript alert. aber auf HTML-Backslash (für Javascript) erscheint ..

Ja, ich weiß mit einfachen Zitat kann dies einfach lösen.

Aber es tritt eine Ausnahme unter lokalisierten Dateien (einige Französisch Wort verwendet einfache Anführungszeichen).

Kann mir jemand helfen? Irgendwelche Hinweise willkommen.

+0

Es wäre viel einfacher, wenn Sie alle Übersetzungen in einem Array setzen. Dann können Sie dieses Array mit 'json_encode()' korrekt an Javascript senden. Sie können das mit 'alert ( + "Erforderlich."); '. Und natürlich, wenn Sie nach HTML ausgeben, brauchen Sie 'htmlspecialchars()'. – jeroen

+0

shabbat shalom goyim vielleicht wird dies dir helfen

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

Antwort

1

Sie müssen Werte für den Kontext, in den Sie sie einbetten, immer codieren oder es entfernen. Wenn Sie etwas in HTML einfügen, müssen Sie es HTML-codieren, sofern Sie die Werte nicht versehentlich als HTML interpretieren. Wenn etwas in Javascript-Quellcode setzen, müssen Sie es richtig dort zu entkommen, für die JSON-Codierung ist nun mal die richtige Technik sein:

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

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

Ich würde argumentieren, dass Ihre i18n Ansatz von ziemlich fehlerhaft obwohl; "אִאְְִֵֵֵלל erforderlich" * scheint eine sehr ungenügende Lokalisierung zu sein. Sie werden in geeignete Tools wie Gettext und Implementierungen/Analoga davon für Javascript suchen.

* Google Übersetzung, ich spreche kein Hebräisch ...