알 수 없는 문자를 출력하는 PHP 포함 함수
-
09-06-2019 - |
문제
PHP include 함수를 사용할 때 include가 성공적으로 실행되지만, include 출력이 출력되기 전에 char도 출력하고 있습니다. char은 16진수 값 3F이고 그것이 어디에서 왔는지는 알 수 없습니다. 모든 포함에서 발생합니다.
처음에는 파일 인코딩인 줄 알았는데 별 문제는 아닌 것 같습니다.이를 시연하기 위해 테스트 케이스를 만들었습니다.(링크가 더 이상 작동하지 않습니다) http://driveefficiently.com/testinclude.php 이 파일은 다음 항목으로만 구성됩니다.
<? include("include.inc"); ?>
include.inc는 다음으로만 구성됩니다.
<? echo ("hello, world"); ?>
그러나 출력은 다음과 같습니다. "?안녕, 세상아" 어디?임의의 값을 가진 문자입니다.내가 출처를 모르는 것이 바로 이 값이며 때로는 내 사이트를 약간 망가뜨리기도 합니다.
이것이 어디에서 올 수 있는지에 대한 아이디어가 있습니까?처음에는 파일 인코딩과 관련된 문제일 수도 있다고 생각했지만 문제는 아닌 것 같습니다.
해결책
당신이 보고 있는 것은 UTF-8 바이트 순서 표시입니다:
BOM의 UTF-8 표현은 UTF-8을 처리할 준비가 되어 있지 않은 대부분의 텍스트 편집기와 웹 브라우저에서 ISO-8859-1 문자 로 나타나는 바이트 시퀀스 EF BB BF입니다.
PHP는 이러한 문자가 "숨겨져야" 한다는 사실을 이해하지 못하고 이를 일반 문자인 것처럼 브라우저에 보냅니다.이를 제거하려면 선행 BOM 없이 파일을 UTF-8로 저장할 수 있는 "적절한" 텍스트 편집기를 사용하여 파일을 열어야 합니다.
다른 팁
귀하의 웹 서버(또는 텍스트 편집기)에는 분명히 다음이 포함되어 있습니다. BOM 문서에.사이트의 인코딩을 명시적으로 Latin-1로 설정한 경우를 제외하고는 브라우저에 악성 문자가 표시되지 않습니다.그러면 두 개의(!) UTF-8 BOM이 보입니다.
/편집하다:있다는 사실에서 둘 BOM BOM은 편집자가 파일 시작 부분에 실제로 포함했다고 결론을 내렸습니다.어떤 편집기를 사용하시나요?Visual Studio를 사용하는 경우 파일 메뉴에서 "다른 이름으로 저장..."이라고 말한 다음 "인코딩으로 저장..." 버튼을 선택해야 합니다.거기에서 "BOM 없는 UTF-8" 또는 이와 유사한 것을 선택합니다.
Firefox나 IE에서는 렌더링된 페이지에 표시되지 않지만 IE에서 소스를 보면 재미있는 문자를 볼 수 있습니다.
Linux 시스템에 있습니까?그런 식으로 3F를 제거할 수 있는지 확인하기 위해 vim 또는 sed를 찾아 교체할 수 있습니까?
Windows의 경우 메모장으로 include.inc를 열어 재미있는 문자가 표시되고 삭제할 수 있는지 확인하세요.
또한 포함된 코드를 복사하여 자체적으로 실행하면 어떤 일이 발생하는지 궁금합니다.
실제로 캐릭터 3F ~이다 물음표는 단지 하나로 표시되는 것이 아닙니다.
Thomas와 동일한 결과를 얻었으며 물음표가 표시되지 않았습니다.
이론적으로는 웹 프록시에 문제가 있을 수 있지만 PHP 마크업에 잘못된 물음표가 있는 것으로 의심됩니다. 아마도 지금쯤 수정하여 문제를 볼 수 없을 것입니다.
알겠어요 hello, world
당신이 링크한 페이지에서.제가 보기에는 문제가 없습니다...
저는 Firefox 3.0.1과 Windows XP를 사용하고 있습니다.어떤 브라우저/OS를 실행하고 있나요?아마도 그게 문제일 수도 있겠네요.
또한 포함에서 코드를 복사하고 스스로 실행하면 어떻게되는지 궁금합니다.
표시:이것은 공유 호스팅 솔루션에 있으므로 파일에 대한 쉘 액세스를 얻을 수 없습니다.그러나 보시다시피 여기, 있으면 안되는 문자가 없으며 동일한 파일을 스크립트로 실행해도 이 문자가 생성되지 않습니다.(공유 호스팅 회사는 도움을 전혀 받지 못했으며 계속해서 브라우저 문제라고 말했습니다.)