2011-02-09 1 views
6

문자열을 HTML로 출력 할 때 이해하기 쉽도록 HTML 엔터티 ("& <>"등)로 특수 문자를 이스케이프해야합니다.HTML 엔터티가있는 문자열을 이스케이프 처리 할 때 UTF-8을 사용하면 유니 코드 127 위의 인코딩 문자를 안전하게 건너 뛸 수 있습니까?

나는이 두 가지 자바 구현을 조사했습니다 org.apache.commons.lang.StringEscapeUtils.escapeHtml (문자열) net.htmlparser.jericho.CharacterReference.encode (CharSequence를)

모두 모든 문자를 이스케이프를 모든 영어가 아닌 문자 인 Unicode 코드 포인트 127 (0x7F)보다 높습니다.

이 동작은 정상이지만 문자가 영어가 아닌 경우 (예 : 히브리어 또는 아랍어) 사람이 읽을 수 없습니다. 필자는 유니 코드 127 위의 문자가 이스케이프 처리되지 않았을 때 브라우저에서 올바르게 렌더링한다는 것을 보았습니다. HTML 페이지가 UTF-8로 인코딩되어 있기 때문에 이러한 문자가 브라우저에서 이해할 수 있다고 생각합니다.

내 질문 : 웹 페이지가 UTF-8로 인코딩 된 경우 HTML 엔티티를 이스케이프 할 때 코드 포인트 127 위의 유니 코드 문자를 안전하게 이스케이프 해제 할 수 있습니까?

답변

5

당신은이 상황에서 HTML 엔티티를 사용할 필요가 : HTML에서 특별한 의미를 갖는 문자를 탈출하기 위해

  • (예 : <)
  • 문서 인코딩에 속하지 않는 문자를 표시하려면 (예 : ISO-8859-1 문서의 기호)

UTF-8이 모든 유니 코드 문자를 나타낼 수 있다고 가정하면 첫 번째 경우 만 적용됩니다.

수동으로 HTML을 입력 할 때 HTML 엔티티를 삽입 한 다음 편집기 및/또는 키보드에서 특정 문자를 입력 할 수없는 경우 실용적인 방법을 찾을 수 있습니다 (문자를 입력하는 것이 허용되지 않는 경우에만 &copy;을 입력하는 것이 더 쉽습니다. 실제 ©을 입력)하지만 자동으로 텍스트를 이스케이프 처리하면 페이지 크기가 커집니다.

자바에 대해서는 거의 알지 못하지만 다른 언어는 특수 문자와 가능한 모든 엔티티를 인코딩하는 기능이 다릅니다.

4

하여 전송 마임 타입 헤더에 인코딩하는 경우 :

Content-Type: text/html; charset=utf-8 

다음 브라우저가 UTF-8로 소스를 해석하고 정상적인 UTF-8로 인코딩 된 바이트로 모든 문자를 보낼 수 있습니다 . 이 사용자 금고 그것은 다시는-열 경우 정보가 HTML 페이지에 저장되어있는 장점이있다

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

:

또는이 같은 HTML 페이지의 헤더에 인코딩을 지정할 수 있습니다 그것은 그의 하드 디스크에서 나중에.

개인적으로 나는 오른쪽 헤더를 보내고 HTML 페이지에 meta 태그를 추가합니다. 두 장소가 인코딩에 동의하는 한 괜찮을 것입니다.

업데이트 : HTML 5가 a new syntax for specifying the encoding 추가했습니다 :

<meta charset="utf-8"> 
관련 문제