문제

브라우저에 데이터를 보낼 때 PHP에서 어떤 인코딩을 사용할 것인지 어떻게 알 수 있습니까? 즉, 코텐트 유형 헤더와 예를 들어, ISO-8859-1.

도움이 되었습니까?

해결책

일반적으로 webhosters의 apache + php 서버 아니 charset 헤더. 서버 구성 방법을 테스트하는 가장 짧은 방법은 다음과 같습니다.

  • 사용 서버 헤더를보기위한이 도구 웹 스테에서 페이지 중 하나를 얻음으로써 서버 헤더에 있으면 a charset 그것은 당신의 서버를 사용하고 있음을 의미합니다. 일반적으로 charset.
  • 또 다른 방법은 서버 에서이 간단한 스크립트를 실행하는 것입니다. <?php echo ini_get('default_charset'); ?> 위에서 말했듯이 이것은 일반적으로 빈 줄을 인쇄합니다. charset PHP의.

두 번째 솔루션은 Apache가 구성되지 않았다고 가정합니다. AddDefaultCharset some_charset 일반적으로 그렇지는 않지만 Apache 설정이 PHP DEAFULT_CHARSET INI 지시문을 무시할 수 있다고 두려워합니다.

다른 팁

William이 제안한 Header () 솔루션을 사용할 수 있지만 Apache를 실행하는 경우 Apache Config가 기본 charset을 사용하는 경우 매번 승리합니다 (Internet Explorer는 미치게됩니다). AddDefaultCharset

내용 유형과 인코딩은 두 가지 다른 것입니다. 텍스트/html은 컨텐츠 유형입니다. ISO-8859-1 및 UTF-8은 인코딩입니다.

서버가 보내는 HTTP 응답 헤더는 일반적으로 다음과 같습니다.

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

"charset"은 실제로 캐릭터 인코딩입니다. 별도의 헤더가 아닙니다. 그러나 "Content-Encoding"이라는 헤더가있어 실제로 응답이 사용하는 압축 종류 (예 : GZIP)를 지정합니다.

html을 포함하는 파일에서 인코딩을 UTF-8로 변경하려면 :

<?
header("Content-Type: text/html; charset=utf-8");

당신은 당신의 자신을 설정할 수 있습니다 header('Content-type: xxx/yyy');, 그러나 텍스트/html이 기본적으로 전송된다고 생각합니다.

AFAIK, PHP는 현악기를 바이 터워합니다. 즉, 변수가 UTF-8을 유지하면 UTF-8을 보냅니다. ISO-8859-1이 있다면이를 보낼 것입니다. 당신이 그것들을 섞으면 예쁘지 않을 것입니다.

서버가 기본 컨텐츠 또는 charset이있는 것으로 구성되지 않은 경우 PHP도 없으면 PHP는 Content-Type: text/html - 숯이 전혀 지정되지 않으며 바이트를 스크립트에서 볼 때 바이트를 보냅니다.

브라우저에 숯이 지정되지 않은 페이지를 수신하면 다양한 일이 발생할 수 있습니다.

  • 대부분의 브라우저에는 "인코딩/숯불"메뉴가 있습니다. 사용자가 명시 적으로 하나를 선택하면 브라우저가 적용하려고합니다. 너무 자주 발생하지 않으므로 :
  • 일부 브라우저는 기본 숯으로 렌더링하려고합니다 (예 : FF 및 CS_CZ의 경우 로케일 의존적입니다. iso-8859-2; YMMV)
  • 즉, 숯불을 곱력을 결정하려고 시도 할 것입니다 (캐릭터 분포를 기반으로 추측 할 것입니다. 그리고 여러 번 제대로됩니다. 때로는 잘못 이해하고 중국어 텍스트로 해석되는 루마니아어로 페이지를 얻습니다. 이는 일반적으로 읽을 수 없습니다. ")
  • 일부 오래된 브라우저가 다시 시작됩니다 us-ascii

이 절차를 사용하면 PHP 스크립트의 숯불 및 브라우저의 숯이 일치하는 경우 텍스트는 우연히 읽을 수 있습니다. 그렇지 않다면, 이상한 징후와 비슷한 현상이있을 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top