2012-07-05 4 views
0

델파이에서 동적 HTML을 생성 중입니다. 웹 페이지 본문에 UTF-8 문자열을 표시하는 데 문제가 없습니다. HTMLEscape를 사용하여 일반 문자열을 인코딩합니다 (문자열 목록의 모든 문자열은 이전에 이스케이프 처리되었습니다).델파이의 동적 페이지에서 자바 스크립트 내부의 문자셋

이 문제는 동적 페이지 내부의 스크립트 (javascript) 함수에서 발생합니다. 단어 "사용자 선호도"와 문자열을

'<script language="javascript" charset="UTF-8">'+#10+ 
(...) 
'function ProcessAddUserButton(){'+#10+ 
'alert("'+web_content_sl[70]+'");'+ 
'}'+#10+ 

내가 경고 상자에 usu&#225;rio를 얻을 수 있지만, 나는 HTML 본체 내부에 동일한 문자열을 사용하는 경우 올바르게 표시됩니다. 위에서 볼 수 있듯이 스크립트 정의 안에 charset을 포함 시키려고했지만 성공하지 못했습니다. 같은 페이지에서 같은 문자열과 다른 결과가 나타나는 이유를 모르겠습니다.

동적 페이지에서 메타 태그는 다음과 같습니다 사람이 경험

'<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />'+#10+ 

으로?

답변

1

문자열은 문자 그대로 "usu&#225;rio"입니다. html을 디코딩하는 컨텍스트에서 "올바르게"표시됩니다. 수동으로 자바 스크립트로 디코딩 할 수도 있지만 html로 인코딩하는 대신 서버에서 리터럴 문자를 전달하는 것이 더 쉽습니다.

여기에 수동으로 자바 스크립트를 디코딩하는 기능입니다 :

나는 당신이 무슨 말을하는지 이해한다면
function decodeHTML(str) { 
    return str.replace(/(?:&#x([a-fA-F0-9]+);|&#([0-9]+);)/g, function(full, m1, m2) { 
     if(m1) { 
      return String.fromCharCode(parseInt(m1, 16)); 
     } 
     else { 
      return String.fromCharCode(parseInt(m2, 10)); 
     } 
    }); 
} 

alert(decodeHTML("usu&#225;rio")) //alerts "usuário" 
+0

, 내가 문자열 인코딩 (HTMLescape)를 비활성화해야합니다. 나는 이미 그것을했으며 결과는 "usu & # 225 리오"대신 "usu rio"입니다. –

+0

@MiguelE 예, 문자열이 UTF-8로 인코딩되지 않았기 때문입니다. 이 파일이 일부 파일에 있으면 UTF-8 인코딩으로 저장되지 않습니다. 데이터베이스에서 온 것일 경우, 데이터베이스는 UTF-8을 사용하지 않습니다. 웹 사이트가 UTF-8 인코딩을 사용한다고 주장하는 것만으로는 충분하지 않으며 UTF-8 인코딩 된 컨텐츠를 전송해야합니다. – Esailija

+0

문자열 원점이 파일 또는 db에서 생성 된 것이 아닙니다. "web_content_sl.Add (HTMLEscape ('to doos os dados do novo usuário.')); // 70"기본적으로 Delphi XE에서 UTF8이어야합니다. 구조체는 TStringlist입니다.) 주기에 파일이나 DB가 없습니다. –

관련 문제