이거 뭐가 잘못되었단 것인지....

국내에 웹 사이트들이 웹 표준을 지키고 OS나 브라우저와 관계 없이 접근성을 향상 시키기 위한 사이트 버그 신고 및 문제 해결을 위한 게시판입니다.
Post Reply
대류

이거 뭐가 잘못되었단 것인지....

Post by 대류 »

UTF-8 로 만들고 저장해서 검사하면 이렇게 오류가 납니다.

http://validator.w3.org/check?uri=http% ... yus.net%2F

euc-kr 로 바꾸면 아무 이상없구요..
왜 그런건지 모르겠습니다.
php 구문을 약간 썼는데 그것때문인가...
빛알갱이
해커
해커
Posts: 1146
Joined: 2004 01 15 20:06 36

Post by 빛알갱이 »

뭘로 편집하셨나요? 파일 선두에 "UTF-8 BOM"이 두 개나 들어 있습니다. 하나 있는 것은 상관 없지만, 두 개 들어 있기 때문에 적법하지 않은 파일이 되어 버렸습니다. DOCTYPE 선언이 파일의 최선두에 나와야 하는데 현재는 U+FEFF가 최선두(처음에 나오는 UTF-8 BOM은 UTF-8을 나타내는 것이므로 파싱할 때에는 제거됩니다. 하지만, 두번째 나오는 U+FEFF - UTF-8로는 0xef 0xbb 0xbf의 세 바이트-는 문서의 일부로 간주됩니다. )에 있기 때문에 에러가 납니다.
daerew
Posts: 7
Joined: 2006 06 22 00:18 05
Contact:

좀 이상한데?

Post by daerew »

빛알갱이 wrote:뭘로 편집하셨나요? 파일 선두에 "UTF-8 BOM"이 두 개나 들어 있습니다. 하나 있는 것은 상관 없지만, 두 개 들어 있기 때문에 적법하지 않은 파일이 되어 버렸습니다. DOCTYPE 선언이 파일의 최선두에 나와야 하는데 현재는 U+FEFF가 최선두(처음에 나오는 UTF-8 BOM은 UTF-8을 나타내는 것이므로 파싱할 때에는 제거됩니다. 하지만, 두번째 나오는 U+FEFF - UTF-8로는 0xef 0xbb 0xbf의 세 바이트-는 문서의 일부로 간주됩니다. )에 있기 때문에 에러가 납니다.
초보다 보니 무슨 말씀이신지 도무지 이해가 안갑니다.
좀 쉽게 풀어서 설명해주시면 고맙겠습니다.
User avatar
Channy
해커
해커
Posts: 1006
Joined: 2002 03 26 17:41 59
Location: 아름다운 제주
Contact:

Post by Channy »

쉽게 말해 doctype 앞에 있는 빈 줄을 삭제하라는 이야기입니다.
doctype앞에는 공백이나 빈줄이 있으면 안됩니다.
Channy
---------------
Are you creative? http://www.creation.net
daerew
Posts: 7
Joined: 2006 06 22 00:18 05
Contact:

삭제했습니다.

Post by daerew »

차니 wrote:쉽게 말해 doctype 앞에 있는 빈 줄을 삭제하라는 이야기입니다.
doctype앞에는 공백이나 빈줄이 있으면 안됩니다.
그래도 결과는 같으네요....ㅡ,.ㅜ
hyeonseok
해커
해커
Posts: 691
Joined: 2004 08 11 22:14 59
Contact:

Post by hyeonseok »

에디터가 문제를 일으키는 것 같습니다. 무슨 에디터를 쓰시나요?
에디터를 바꾸보면 문제가 해결 될 수도 있습니다.
daerew
Posts: 7
Joined: 2006 06 22 00:18 05
Contact:

그게...

Post by daerew »

hyeonseok wrote:에디터가 문제를 일으키는 것 같습니다. 무슨 에디터를 쓰시나요?
에디터를 바꾸보면 문제가 해결 될 수도 있습니다.
메모장인데요 ㅡ,.ㅜ
hyeonseok
해커
해커
Posts: 691
Joined: 2004 08 11 22:14 59
Contact:

Re: 그게...

Post by hyeonseok »

daerew wrote:
hyeonseok wrote:에디터가 문제를 일으키는 것 같습니다. 무슨 에디터를 쓰시나요?
에디터를 바꾸보면 문제가 해결 될 수도 있습니다.
메모장인데요 ㅡ,.ㅜ
아..메모장에서는 해본적이 없어서...;;
메모장 말고 utf-8 인코딩을 제대로 지원하는 전용 에디터(드림위버나 에디트플러스2 같은...)를 한번 사용해 보세요.
빛알갱이
해커
해커
Posts: 1146
Joined: 2004 01 15 20:06 36

Post by 빛알갱이 »

daerew wrote:
차니 wrote:쉽게 말해 doctype 앞에 있는 빈 줄을 삭제하라는 이야기입니다.
doctype앞에는 공백이나 빈줄이 있으면 안됩니다.
그래도 결과는 같으네요....ㅡ,.ㅜ
님의 경우에는 DOCTYPE 앞에 줄이 하나 있는 게 아니라 글자가 한 자 들어 있습니다. 그 글자가 Unicode의 U+FEFF(한글 '가'는 U+AC00입니다.)이고요. 그 필요 없는 글자를 지워야 합니다. 지웠다고 하시지만, 현재 대류닷컴에 올려진 파일에는 여전히 그 글자가 남아 있습니다.

제거하는 방법:
1. 바이너리 편집기 등을 써서 앞의 세 바이트를 지운다. 그 글자는 UTF-8에서 세 바이트로 표현됩니다.
2. '보이지 않는 글자'나 표시할 글꼴이 없는 글자를 코드 포인트로 보여 주거나 '?' 혹은 '.' 등으로 보여 주는 편집기를 찾아서 처음에 나오는 그 글자를 제거한다. 예를 들어, Windows용 vim(http://www.vim.org)로 파일을 연 뒤에 ':set encoding=utf-8'을 치고 나면 맨 앞에 파란 색으로 '<feff>'라고 표시됩니다. 그 글자 위에 커서를 두고 'x'를 눌러서 삭제한 뒤에 ZZ를 눌러서 저장하세요. jedit (http://www.jedit.org)나 다른 편집기를 (요새는 UTF-8을 지원하는 윈도우즈용 편집기가 많습니다.) 써도 되고요.


앗 ... 대류닷컴의 문제가 되는 페이지를 보니 U+FEFF가 파일 선두에 두 개 있을 뿐 아니라 파일 중간에도 하나 있군요. 혹시, PHP에서 'include' 등을 사용해서 파일 두 개를 불러 들였나요? 그리고, 각각의 파일도 노트패드로 편집하셨나요? BOM(Byte Order Mark)를 붙일 것인지 말 것인지 지정할 수 있는 UTF-8 편집기에서 (몇 개 있는데, 지금 기억이 안 납니다. 제가 윈도우즈에서 UTF-8 편집을 할 일이 별로 없어서) 그 두 파일과 PHP 파일을 읽어 들인 후에 BOM을 붙이지 않고 다시 저장해 보십시오.

왜 UTF-8 BOM을 안 쓰는 게 좋은지 보여 주는 또다른 보기로군요.


--------------------------

아래를 읽어도 여전히 모른다고 하시겠지요? <http://www.unicode.org/>에 있는 glossary에서 용어의 정의를 찾아 보시면 좀더 이해하기 쉬울 것입니다.

그 글자는 바이트 오더가 파일 내용 해석에 중요한 차이를 주는 (바이트가 기본 단위가 아니고, 16비트나 32비트 워드가 기본 단위인) UTF-16, UTF-32 등의 파일 선두에 놓여서 Big Endian인지 Little Endian(이런 용어는 모른다고 하지 마시고, 검색해서 찾아 보세요. 예를 들어 http://www.unicode.org : glossary에서) 나타내 주는 Byte Order Mark(BOM)로 쓰입니다. 바이트가 기본 단위인 UTF-8에는 그런 게 필요 없지만, 노트 패드를 비롯한 Windows의 몇몇 편집기는 기존에 쓰던 CP949(한국어 윈도우의 경우)와 구별하기 위해서 UTF-8로 저장하면 맨 선두에 그것을 붙여 둡니다. 그런데, 어떤 까닭인지 님이 올린 파일은 그 글자가 자만 들어 있어야 하는데, 개가 파일 맨 앞에 들어 있습니다. 맨 앞의 그 글자는 UTF-8 BOM(어폐가 있지만, 어쨌든 쓰이는 말입니다)이므로 무시하지만 (없는 것이나 마찬가지), 그 다음에 나오는 그 글자는 무시하지 않습니다. 따라서, DOCTYPE 선언 앞에 글자가 하나 있으므로, 적법하지 않은 문서가 됩니다.
Post Reply

Who is online

Users browsing this forum: No registered users and 1 guest