2017-03-10 8 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"/> 

私はヘブライ語での作業のだとき[Javascriptの]

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

は、問題が発生しました。

ヘブライ語の「電子メール」には二重引用符があります。

二重引用符をエスケープしようとしました。

二重引用符をエスケープするため、

PHPは1つのバックスラッシュを必要とし、Javascriptを1以上とバックスラッシュのためにお互いを必要としています。

二重引用符の前に3つのバックスラッシュを追加しました。

javascriptアラートで正しいことを示します。しかし、HTMLのバックスラッシュ(javascriptの場合)が表示されます..

はい、私はこれを簡単に解決することができます。

しかし、ローカライズファイルの中では例外が発生します(一部のフランス語では一重引用符が使用されます)。

誰でもこれについてお手伝いできますか?すべての手がかりを歓迎します。

+0

あなたは、アレイ内のすべての翻訳を置けばそれは非常に簡単になります。次に、 'json_encode()'を使ってjavascriptに配列を正しく送ることができます。 'alert(<?= json_encode(WORD_EMAIL);?> +" required。 ");'を使って試してみることができます。もちろん、htmlに出力するときには 'htmlspecialchars()'が必要です。 – jeroen

+0

shabbat shalom 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用の実装/類似のような適切なツールを調べたいと思うでしょう。

* Googleの翻訳、私はヘブライ語を話さない...

関連する問題