2013-08-04 2 views
2

아파치 웹 서버에 PHP 웹 사이트가 있습니다. 그 사이트는 수년간 wotrking되었습니다.charset = us-ascii 내 콘텐츠 유형에

몇 주 전에 나는 그 기계를 다시 설치해야했다. 그래서 모든 백업을 확인하고, OS (Gentoo)를 재설치하고 새로운 컴퓨터에서 아파치와 PHP의 같은 버전으로 웹 사이트를 복원했다.

나는 페이지가로드되었고 그다지 많지는 않은 것으로 확인했다. 모든 것이 잘 보였다.

오늘은 그 사이트에 다시 작업을 시작했고, 나는 브라우저에서 출력 코드를 검사 할 때 나는이 발견 :

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

것은 아파치가 UTF-8로 물건을 보내도록 설정되어있다 , php는 utf-8로 디폴트 charset을 가지며, 파일은 모두 utf-8로 저장되고 PHP 코드는 utf-8로 Content-Type을 생성합니다. us-ascii 값은 어디에서 오는가?

코드를 생성하는 PHP에서

, 모든 권리

ob_start(); 

// check the output 
var_dump($tmp);exit(__FILE__.' '.__LINE__); 

// send the clean HTML document or the raw XML if something went wrong 
if ($tmp['final_document'] !== false) { 
    echo($tmp['final_document']); 
} else { 
    echo($tmp['xml_content']); 
} 

ob_end_flush(); 

위해서 var_dump 위, 올바른 콘텐츠 유형과 XHTML 소스를 출력

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

하지만 일반적으로 페이지를 보내는 경우 인코딩은 ascii입니다.

제가 기억하는 한 유일한 변경 사항은 mod_security를 ​​설정하는 것입니다.

확인해야 할 사항은 무엇입니까? 어떤 파일? 어떤 구성입니까?

참고 : 나는 문제가 그와 관련이 있다고 생각하기 때문에 나는 단지 아파치 태그를 포함하고있어

의 위해서 var_dump는 PHP 바로 코드를 생성하는 것을 보여줍니다. 문제가 다른 경우 태그를 적절하게 조정합니다.

상황과 해결책을 반영하여 태그를 업데이트했습니다.

업데이트 - 솔루션 : 제안으로

, 나는이 부분에서 솔루션을 제거하고 대답로했다.

+0

글쎄, 실제로 보내는 콘텐츠에 비 ASCII 문자가 포함되어 있습니까? 해당 컨텐츠 유형은 컨텐츠에 적용되는 자동 휴리스틱 스의 결과 일 수 있습니다. 8 비트 인코딩에서 utf-8로 응용 프로그램을 포팅 할 때 큰 문제가있었습니다. 그러한 경험적 방법의 구현은 종종 '제한적'입니다 ... – arkascha

+0

의견을 주셔서 감사합니다. 예. 페이지의 언어가 스페인어로되어 있습니다. – PatomaS

+0

ASCII 문자가 아닌 문자가 있다고 가정합니다. 그 문자들은 처음 500 자 이내입니까? 그리고 : 내용이 ascii로 전송되면 문자는 어떻게 코딩됩니까? 전송 된 콘텐츠를 파일로 직접 덤프 해보고 (16 진 편집기를 사용하여 콘텐츠를 확인하십시오.) 이것은 내용이 어떤 것으로 변경되었는지 또는 잘못된 값 (whyever)으로 지정된 인코딩 일지를 결정하는 유일한 신뢰할 수있는 방법입니다. – arkascha

답변

0

문제는, 웹 사이트에서 하나 개의 구성 라인에 의해 발생 된 구성 섹션에서, 나는이 있었다 :

ini_set('tidy.clean_output', true); 

을하지만 내가 결정하기 때문에이 시간을 깔끔한 설치하지 않은, 전 시간 사용을 중지하기 그것을하고 내 자신의 미적을하십시오. 백업/복원 프로세스 전에 깔끔하게 사용하기는했지만 여전히 시스템에 설치되어 있었고 사이트의 구성 라인을 삭제하는 것을 잊어 버렸습니다. 개인 설정 이후 최소한 모든 기본값을 사용하고있었습니다. 깔끔하게 정리되었다. 그것은 별도의 파일에있었습니다.

이 오류는 사용자가 깔끔하게 사용할 때 최소한 기본에서는 최종 결과물이 PHP 파서에서 깔끔하게 나옵니다. 아파치에서 아파치로, 그리고 거기에서 사용자에게 전달됩니다. 내 내부 프로세스의 특정 부분에서 정리를 사용하므로 PHP가 어떻게 정보를 기본적으로 전송했는지 기억하지 못했습니다.비록 내가 출력 버퍼링을 사용하고 있기 때문에 결국 보내지는 것이 합리적이다.

HTML Tidy Configuration Options에서 기본 charset은 ascii입니다.