2017-03-10 14 views
1

나는 PHP를 기반으로 다국어 사이트에서 일하고 있습니다.이스케이프 히브리어 이중 인용문 모두 PHP와 자바 스크립트

다국어 지원을 위해 다음과 같은 현지화 파일을 사용하고 있습니다. 다음과 같은 두 가지 방법이 사용

[localize.en-US.php]

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

. 
. 
. 

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

. 
. 
. 

정의 단어.

[HTML] 나는 히브리어 작업을 거라고 때 문제가 발생

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

<?=WORD_EMAIL?> : <input type="text" name="email"/> 
<?=WORD_NAME?> : <input type="text" name="name"/> 

[자바 스크립트].

히브리어 tanslation의 "전자 메일"이라는 단어에는 큰 따옴표가 있습니다.

큰 따옴표를 이스케이프 처리하려고했습니다.

따옴표를 탈출하려면,

PHP는 하나의 백 슬래시를해야하고, 자바 스크립트는 하나 더 백 슬래시 서로가 필요합니다.

그래서 큰 따옴표 앞에 3 개의 백 슬래시를 추가했습니다.

자바 스크립트 경고 메시지가 표시됩니다. 하지만 HTML 백 슬래시 (javascript 용)에 나타납니다.

네, 작은 따옴표를 사용하면이 문제를 간단하게 해결할 수 있습니다.

그러나 지역화 파일 (일부 프랑스어 단어는 작은 따옴표를 사용) 중에서 예외가 발생합니다.

누구든지 도움이 될 수 있습니까? 모든 단서 환영.

+0

그것은 훨씬 쉽게 될 ... 히브리어 말을하지 않습니다. 그런 다음'json_encode()'를 사용하여 배열을 javascript로 정확하게 보낼 수 있습니다. 'alert ( + "required.");'를 사용하여 테스트해볼 수 있습니다. 물론 html로 출력 할 때'htmlspecialchars()'가 필요합니다. – jeroen

+0

shabbat shalom goyim 어쩌면 도움이 될 것입니다

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

답변

1

삽입 할 컨텍스트에 항상 값을 인코딩하거나 이스케이프 처리해야합니다. HTML로 값을 입력 할 때 우연히 HTML로 해석 된 값을 원하지 않는 한 HTML 인코딩해야합니다.

alert(<?= json_encode(WORD_EMAIL); ?> + " required."); 

<?= htmlspecialchars(WORD_EMAIL, ENT_COMPAT, 'UTF-8'); ?> : <input type="text" name="email"/> 
는 또한 The Great Escapism (Or: What You Need To Know To Work With Text Within Text) 참조 : 자바 스크립트 소스 코드에 아무것도 넣어하면되는 JSON 인코딩은 바로 기술 될 일이 제대로 거기를 탈출해야합니다.

나는 당신의 i18n 접근법이 꽤 결함이 있다고 주장 할 것이다. "אִימֵיְיל required"*는 현지화가 매우 부족한 것처럼 보입니다. Javascript를위한 gettext 및 구현/유사점과 같은 적절한 도구를 살펴보고 싶을 것입니다.

* Google 번역, 당신이 배열의 모든 번역을 넣으면