html문서에 한글 인코딩 지정 방법

zzesu의 이미지

linux의 아파치 서버에서 html 파일을 하나 만들었는데
익스플로러에 열어보면 한글이 깨져보입니다.

(인코딩을 한글로 인식하지 못하는 문제로 물론 익스플로러에서 인코딩을 한글로 지정해주면 잘보이지면 페이지를 열때마다 그럴
수는 없는 노릇이구요. )

어딘가에서 읽은대로 meta로 charset=euc-kr을 지정해도
익스플로러에서 화면을 열때 encoding을 한글로 인식하지
못합니다.

아래는 사용한 html 문서의 내용

<HTML>
<HEAD>
<META http-equiv="Content-Type"
content="text/html; charset=EUC-KR">
<TITLE>HTML SAMPLE</TITLE>
</HEAD>
<BODY>
<P>This is a sample HTML page
<p> 한글
</BODY>
</HTML>

그래서 결국 apache의 구성 파일인 httpd.conf에서

AddDefaultCharset ISO-8859-1

AddDefaultCharset euc-kr
처럼 변경하고 httpd를 restart 했습니다.

그러니까 잘되는군요.

하지만 정말 위의 방법밖에 없는 것일까요?

만약에 호스팅서비스를 받는데 그 호스트의 apache 디폴트
인코딩이 한글이 아니라면 어떻게 하나요?

nohmad의 이미지

AddDefaultCharset 라인 자체를 없애세요. 서버의 헤더에서 명시하면 다른 모든 것보다 우선하게 됩니다.

zzesu의 이미지

음 그러면, AddDefaultCharset이 영어로 setting된 서버를 써야만하고, apache설정을 바꿀 권한이 없는 경우라면 다른 방법이 없는 건가요?

#!헤이~째수

markboy의 이미지

.htaccess 쓰면 안되나요?

익명 사용자의 이미지

header() 함수로 지정해도 안됩니까?

header("Content-type: text/plain; charset=euc-kr");

정태영의 이미지

Default Charset 을 명시해줬을 경우.. 기본으로.. 헤더에.. charset 관련된 정보가 붙던가요..?

아파치 1.x버젼에서는.. 그렇지 않았던 걸로 기억하고.. html 파일을.. php모듈이 처리하도록 해놓은 경우.. php.ini 에서.. charset 관련된 설정을 하면.. 기본으로..

Quote:
Content-type: text/plain; charset=설정한케릭터셋

와 같은.. 헤더가 붙었던 걸로 기억되는군요.. 아파치 2.x는 별로 사용해보지 않아서 잘 모르겠군요 :) 또한 아파치 api (모듈들이 사용하는 API죠..) 에 보면.. 기본.. Content-type과.. charset 을 정해주도록 되어있기도 합니다 :)

php 에서는.. 아래와 같은 식으로 하면.. 기본 content-type 과.. charset 을 override 할 수 있습니다..

Quote:
header("Content-type: text/plain; charset=euc-kr");

html 에서 meta 태그를 이용해서.. charset 을 명시해주는 것과.. header 에서.. charset 을 명시해준 것 중.. 표준에서 어떤 것을 더 의미 있게 여겨야 하는지까지는.. 정해져 있지 않습니다..

그렇기 때문에.. 그걸 처리함에 있어서.. 브라우져 마다 차이를 보이고 있고.. I.E 에서는.. meta 로 지정한 케릭터셋에 더 우선순위를 주고 있고.. 모질라계열등에선.. header 에서 보내주는 정보를 더 의미있게 여기는 것 같습니다..

또.. .htaccess 등에서.. php 의 variable 이라던지..(이건 아파치2에서는 안될겁니다 제가 알기론..) 기본 charset 관련된 옵션들을.. override 할 수 있습니다.. (다만.. AllowOverride 등의 옵션이 켜져있어야 겠지요..)

오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...

http://mytears.org ~(~_~)~
나 한줄기 바람처럼..

nohmad의 이미지

정태영 wrote:
Default Charset 을 명시해줬을 경우.. 기본으로.. 헤더에.. charset 관련된 정보가 붙던가요..?

아파치 1.x버젼에서는.. 그렇지 않았던 걸로 기억하고.. html 파일을.. php모듈이 처리하도록 해놓은 경우.. php.ini 에서.. charset 관련된 설정을 하면.. 기본으로..

Quote:
Content-type: text/plain; charset=설정한케릭터셋

와 같은.. 헤더가 붙었던 걸로 기억되는군요.. 아파치 2.x는 별로 사용해보지 않아서 잘 모르겠군요 :) 또한 아파치 api (모듈들이 사용하는 API죠..) 에 보면.. 기본.. Content-type과.. charset 을 정해주도록 되어있기도 합니다 :)

php 에서는.. 아래와 같은 식으로 하면.. 기본 content-type 과.. charset 을 override 할 수 있습니다..

Quote:
header("Content-type: text/plain; charset=euc-kr");

AddDefaultCharset은 가장 기본이 되는 설정입니다. 1.X대에서는 다르게 작동하나요? DefaultCharset이라는 명칭을 쓰면서 또 어떻게 다른 동작을 하는지 궁금하군요. ;)

기본 설정이 그렇다는 것이고, 다른 아파치 모듈이나 CGI 수준에서 클라이언트에 보낼 헤더를 오버라이딩해서 쓰는 것이야 아무 문제될 것이 없죠(지금 이 문제를 얘기하는 것은 아니지요?). 다만 사용자가 따로 over write 하지 않았을 경우, AddDefaultCharset 설정을 따른다는 얘기입니다. 일반적인 html 문서라면 이 설정의 영향을 받을 가능성이 크겠지요. 물론 디렉토리에 대해 Override 옵션이 켜져 있고, .htaccess에서 오버라이드한다면 자기가 원하는대로 문서의 문자셋을 설정할 수 있겠으나, 이 경우에도 개별 html 문서의 meta에서 지정한 문자셋에 따라 자연스럽게 처리되도록 하지는 못합니다. 게다가 Override 옵션을 켜놓는 것이 서버 퍼포먼스에 상당한 영향을 준다는 것을 아는 호스팅 사업자라면 Override 옵션을 허용하지 않을 가능성이 큽니다. 따라서 다양한 방식으로 인코딩된 문서들을 처리하기 위해서는 각 문서에서 지정한 문자셋에 따라 처리될 수 있도록 Global Server Context에서 AddDefaultCharset 옵션을 제거하는 것이 바람직하다고 생각합니다.

정태영 wrote:
html 에서 meta 태그를 이용해서.. charset 을 명시해주는 것과.. header 에서.. charset 을 명시해준 것 중.. 표준에서 어떤 것을 더 의미 있게 여겨야 하는지까지는.. 정해져 있지 않습니다..

그렇기 때문에.. 그걸 처리함에 있어서.. 브라우져 마다 차이를 보이고 있고.. I.E 에서는.. meta 로 지정한 케릭터셋에 더 우선순위를 주고 있고.. 모질라계열등에선.. header 에서 보내주는 정보를 더 의미있게 여기는 것 같습니다..

IE에서 HTML의 문자셋 설정을 더 중시한다구요? 그렇게 처리하는 IE 버전을 알려주시겠습니까? 저 역시 HTTP 표준인 RFC 2616과 HTML에 대한 W3C 권고안이 충돌할 때 어느쪽이 더 우선하느냐는 문제는 구현에 따라 다를 것이라고 생각했는데, 의외로 제가 테스트해본 클라이언트들(Mozilla, Firefox, IE6, Epiphany, Konqueror, 그외 RSS 수집기들) 모두가 HTTP를 우선하고 있었습니다.

추측컨대, HTTP 프로토콜 자체가 HTML을 포함해 많은 media-type을 처리하고 있고, 그중에는 자신의 문자셋을 명시할 수 있는 수단을 갖지 못한 media-type(text/css나 text/javascript 등)들도 많을 것이므로, HTTP를 우선하는 것이 일관적이고 좋은 방법이라고 생각해볼 수 있습니다. 물론 이것은 단순히 추측일 뿐이고, 표준에 없는 내용이니 순전히 구현자 마음이라고 주장하신다면 더 반박하기는 힘듭니다. 하지만, W3C 권고안 보다는 RFC 표준이 더 권위가 있는 것은 사실이고, 브라우저들이 HTML 전용 뷰어가 아니라 일반적인 HTTP 에이전트에 더 가깝다고 볼 수 있기에 HTML과 HTTP가 충돌할 때, 일반적으로 HTTP가 우선한다고 가정해도 큰 무리는 없을 것 같습니다.

HTML과 HTTP에 대해서는 확실히 규정된 것이 없는 반면, XML과 HTTP에 대해서는 그렇지 않습니다. 제가 직접 본 내용은 아니고 Mark Pilgrim씨의 블로그에서 본 내용인데, 유감스럽게도 Mark Pilgrim씨의 블로그가 죽어 있어 Google 캐시로 링크를 겁니다. 이 블로그에 따르면, xml media-type에 대해서는 어떤 인코딩이 우선하는지에 대해 잘 규정되어 있습니다.

정태영의 이미지

nohmad wrote:
정태영 wrote:
Default Charset 을 명시해줬을 경우.. 기본으로.. 헤더에.. charset 관련된 정보가 붙던가요..?

아파치 1.x버젼에서는.. 그렇지 않았던 걸로 기억하고.. html 파일을.. php모듈이 처리하도록 해놓은 경우.. php.ini 에서.. charset 관련된 설정을 하면.. 기본으로..

Quote:
Content-type: text/plain; charset=설정한케릭터셋

와 같은.. 헤더가 붙었던 걸로 기억되는군요.. 아파치 2.x는 별로 사용해보지 않아서 잘 모르겠군요 :) 또한 아파치 api (모듈들이 사용하는 API죠..) 에 보면.. 기본.. Content-type과.. charset 을 정해주도록 되어있기도 합니다 :)

php 에서는.. 아래와 같은 식으로 하면.. 기본 content-type 과.. charset 을 override 할 수 있습니다..

Quote:
header("Content-type: text/plain; charset=euc-kr");

AddDefaultCharset은 가장 기본이 되는 설정입니다. 1.X대에서는 다르게 작동하나요? DefaultCharset이라는 명칭을 쓰면서 또 어떻게 다른 동작을 하는지 궁금하군요. ;)

기본 설정이 그렇다는 것이고, 다른 아파치 모듈이나 CGI 수준에서 클라이언트에 보낼 헤더를 오버라이딩해서 쓰는 것이야 아무 문제될 것이 없죠(지금 이 문제를 얘기하는 것은 아니지요?). 다만 사용자가 따로 over write 하지 않았을 경우, AddDefaultCharset 설정을 따른다는 얘기입니다. 일반적인 html 문서라면 이 설정의 영향을 받을 가능성이 크겠지요. 물론 디렉토리에 대해 Override 옵션이 켜져 있고, .htaccess에서 오버라이드한다면 자기가 원하는대로 문서의 문자셋을 설정할 수 있겠으나, 이 경우에도 개별 html 문서의 meta에서 지정한 문자셋에 따라 자연스럽게 처리되도록 하지는 못합니다. 게다가 Override 옵션을 켜놓는 것이 서버 퍼포먼스에 상당한 영향을 준다는 것을 아는 호스팅 사업자라면 Override 옵션을 허용하지 않을 가능성이 큽니다. 따라서 다양한 방식으로 인코딩된 문서들을 처리하기 위해서는 각 문서에서 지정한 문자셋에 따라 처리될 수 있도록 Global Server Context에서 AddDefaultCharset 옵션을 제거하는 것이 바람직하다고 생각합니다.

정태영 wrote:
html 에서 meta 태그를 이용해서.. charset 을 명시해주는 것과.. header 에서.. charset 을 명시해준 것 중.. 표준에서 어떤 것을 더 의미 있게 여겨야 하는지까지는.. 정해져 있지 않습니다..

그렇기 때문에.. 그걸 처리함에 있어서.. 브라우져 마다 차이를 보이고 있고.. I.E 에서는.. meta 로 지정한 케릭터셋에 더 우선순위를 주고 있고.. 모질라계열등에선.. header 에서 보내주는 정보를 더 의미있게 여기는 것 같습니다..

IE에서 HTML의 문자셋 설정을 더 중시한다구요? 그렇게 처리하는 IE 버전을 알려주시겠습니까? 저 역시 HTTP 표준인 RFC 2616과 HTML에 대한 W3C 권고안이 충돌할 때 어느쪽이 더 우선하느냐는 문제는 구현에 따라 다를 것이라고 생각했는데, 의외로 제가 테스트해본 클라이언트들(Mozilla, Firefox, IE6, Epiphany, Konqueror, 그외 RSS 수집기들) 모두가 HTTP를 우선하고 있었습니다.

추측컨대, HTTP 프로토콜 자체가 HTML을 포함해 많은 media-type을 처리하고 있고, 그중에는 자신의 문자셋을 명시할 수 있는 수단을 갖지 못한 media-type(text/css나 text/javascript 등)들도 많을 것이므로, HTTP를 우선하는 것이 일관적이고 좋은 방법이라고 생각해볼 수 있습니다. 물론 이것은 단순히 추측일 뿐이고, 표준에 없는 내용이니 순전히 구현자 마음이라고 주장하신다면 더 반박하기는 힘듭니다. 하지만, W3C 권고안 보다는 RFC 표준이 더 권위가 있는 것은 사실이고, 브라우저들이 HTML 전용 뷰어가 아니라 일반적인 HTTP 에이전트에 더 가깝다고 볼 수 있기에 HTML과 HTTP가 충돌할 때, 일반적으로 HTTP가 우선한다고 가정해도 큰 무리는 없을 것 같습니다.

HTML과 HTTP에 대해서는 확실히 규정된 것이 없는 반면, XML과 HTTP에 대해서는 그렇지 않습니다. 제가 직접 본 내용은 아니고 Mark Pilgrim씨의 블로그에서 본 내용인데, 유감스럽게도 Mark Pilgrim씨의 블로그가 죽어 있어 Google 캐시로 링크를 겁니다. 이 블로그에 따르면, xml media-type에 대해서는 어떤 인코딩이 우선하는지에 대해 잘 규정되어 있습니다.

첫번째 질문 관련해서는.. 아파치 1.x 의 기본 설정파일엔.. AddDefaultCharset 은 존재하지 않고.. 관련 설정을 해보지 않았기에.. 어떻게 동작하는지를 물어보고자 했던건데 너무 글이 공격적이군요..

http://httpd.apache.org/docs-2.0/mod/core.html#adddefaultcharset

아파치 문서를 보면.. nohmad 님의 말이 맞군요.. I.E 를 사용해서 테스트해본지가 꽤 오래됐었기 때문에.. 제가 잘못 알고 있었나보군요..

.htaccess 라던가.. php 모듈 관련.. 혹은.. php 코드 내에서 header 를 override 할 수 있는 방법도 존재한다는 것을 말하고 싶었던 것이지.. 꼭 그걸로만 해결해야 한다거나.. 그걸로 해결할 수 있다라는 것이 아니었는데.. 뭐 하튼..

기분은 별로군요.. -_-;;

오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...

http://mytears.org ~(~_~)~
나 한줄기 바람처럼..

nohmad의 이미지

정태영 wrote:
첫번째 질문 관련해서는.. 아파치 1.x 의 기본 설정파일엔.. AddDefaultCharset 은 존재하지 않고.. 관련 설정을 해보지 않았기에.. 어떻게 동작하는지를 물어보고자 했던건데 너무 글이 공격적이군요..

http://httpd.apache.org/docs-2.0/mod/core.html#adddefaultcharset

아파치 문서를 보면.. nohmad 님의 말이 맞군요.. I.E 를 사용해서 테스트해본지가 꽤 오래됐었기 때문에.. 제가 잘못 알고 있었나보군요..

.htaccess 라던가.. php 모듈 관련.. 혹은.. php 코드 내에서 header 를 override 할 수 있는 방법도 존재한다는 것을 말하고 싶었던 것이지.. 꼭 그걸로만 해결해야 한다거나.. 그걸로 해결할 수 있다라는 것이 아니었는데.. 뭐 하튼..

기분은 별로군요.. -_-;;

제 글이 공격적으로 느껴지셨다면 원래 그럴 의도는 없었으므로 순전히 제가 글을 잘못 쓴 것 같다고 생각되는데, 제 글의 어느 부분이 공격적으로 느껴지셨는지 말씀해주시겠습니까?

혹시 "(지금 이 문제를 얘기하는 것은 아니지요?)"라고 한 부분인가요? OP(Original Poster)께선 html 문서를 얘기했었고, 거기에 대해 아파치 API와 php.ini, PHP의 header 함수를 얘기하는 것은 불필요한 논의라고 생각했습니다. 물론 제가 처음에 남긴 글도 AddDefaultCharset 설정을 변경할 권한이 없는 일반 호스팅 유저에게는 별 도움이 안되는 내용이고, 차라리 php의 header 함수를 알려드리는 것이 그럴듯한 대답일 수도 있겠습니다만, 어쨌건 저는 OP의 질문 범위를 벗어나는 주제라고 생각했습니다.

Q&A 게시판에서 주제와 상관없는 불필요한 논쟁이 이어지는 것은 바라지 않습니다만, 저로서는 저 문장이 그렇게 불쾌하게 받아들여질만한 표현이었는지 모르는 상태에서 멍한 느낌을 감출 수가 없습니다.

끝으로 OP께는, 호스팅 관리자에게 AddDefaultCharset을 제거하도록 건의해보는 것이 좋을 것 같으며, 받아들여지지 않을 경우, 만일 PHP를 사용할 수 있다면, 아래와 같은 내용을 euckr.php 정도로 저장해두고, http://domain/path/euckr.php?file=foobar.html 식의 주소를 사용하면 될 것 같군요.

<?php
header("Content-type: text/html; charset=euc-kr");
echo file_get_contents($_GET['file']);
?>
zzesu의 이미지

답변해 주신 여러분께 감사드립니다.
큰 도움이 되었습니다.
결국 header() 라는 놈을 써야 할 것 같네요.

nohmad님 전에 irc에서 한 번 뵌 적이 있는 것 같네요.
그 robot은 잘 있나요?

#!헤이~째수

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.