2010-08-16 7 views
1

저는 WebMatrix의 Windows 시스템에서 실행되는 PHP를 오랫동안 사용하지 않은 언어 인 PHP를 사용하여 단순한 웹 사이트에서 작업하고 있습니다. 최근에 나는 ASP.NET (Umbraco)에서 PHP로 웹 사이트를 PHP로 작성된 기본 템플릿 클래스로 포팅 해왔다. 그리고 지금까지는 DOCTYPE 전에 유니 코드 문자가 내 소스에 나타나기까지 꽤 잘 진행되었다. . Mozilla 소스 검사기는이를 표시하지 않지만 메모장에 게시 할 때 두 개의 유니 코드 상자/문자가 표시됩니다.맨 위 페이지의 유니 코드 문자로 인해 WebMatrix에 간격이 생깁니다.

파이어 버그의 문제점을 살펴 봤지만 소스 코드를 간략하게 살펴보면 모든 JavaScript가 body 태그 내에서 실행되고 있다고 생각됩니다.

WebMatrix에서 ASP.NET을 실행할 때 동일한 소스 코드가 완벽하게 작동하지만 아래 PHP 코드를 사용하여이 수정 된 웹 사이트가 제대로 작동하지 않습니다. 다음은 일반적인 페이지 파일부터 시작하여 사용중인 코드입니다.

<?php 
include "./template.class.php"; 

$content = "<p>Test.</p>"; 

$template = new Template; 
$template->load("./design.php"); 
$template->replace("title", "Title"); 
$template->replace("ContentTitle", "Test"); 
$template->replace("PageContent", $content); 
$template->publish(); 
?> 

다음은 내가 사용하는 템플릿 클래스입니다. 도시 된 바와 같이

<?php 
class Template { 
    var $template; 

    function load($filepath) { 
     $this->template = file_get_contents($filepath); 
    } 

    function replace($var, $content) { 
     $this->template = str_replace("@[email protected]", $content, $this->template); 
    } 

    function publish() { 
     eval("?>".$this->template."<?"); 
    } 
} 
?> 

설계 페이지는 상기 심볼 (예컨대 <title>@[email protected]</title>) 나열 필요한 필드와, 각 페이지에 대해 사용된다.

저는 CSS와 HTML이 다른 웹 사이트에서 거의 동일한 코드를 사용하고 있기 때문에 아무런 문제가없는 것처럼 비난하지 않는다고 확신합니다.


편집 : 문제가 발견되었지만, 그렇게는 지속적으로 PHP 파일을 저장할 때 바이트 순서 표시를 표시하게됩니다 마이크로 소프트의 새로운 WebMatrix 편집기에서 해당 편집 PHP 파일을 표시합니다. 위에서 언급했듯이 Notepad ++는이 문제를 해결하는 데 매우 효율적입니다. 동일한 문제가 있으면 필요한 모든 파일을 열고 최상위 메뉴의 인코딩으로 이동하여 "BOM없이 UTF-8로 변환"을 클릭하십시오. 일단 저장되면 문제가 사라집니다.

저는 이것이 WebMatrix 도구의 유효한 버그라고 생각합니다. Windows Live와 관련하여 회사 인터넷에 제한이 없다면 버그를 제출해 주시면 기쁘게 생각합니다. 버그가 게시 된 것을 보거나 직접 해보는 경우,이 결함에 대해서도 WebMatrix 도구는 ASP.NET Razor 및 PHP를위한 환상적인 편집기입니다.

+0

예 : 이 질문 : http://stackoverflow.com/questions/1814258/bom-in-a-php-page-auto-generated-by-wordpress –

+0

나는 그것이 완벽하게 합리적이기 때문에 이것이 WebMatrix 버그라고 생각하지 않는다. BOM이있는 UTF-8 파일을 시작합니다. UTF-8로 인코딩 된 파일을 읽을 때 BOM을 올바르게 해석하지 않는 버그가 있습니다. – Alohci

+0

PHP 스크립트는 유니 코드 문자가 아닌 바이트 기반입니다. PHP 나 다른 바이트 기반 도구는 파일 시작시 임의의 상위 바이트를 처리 할 수 ​​없습니다. UTF-8에는 바이트 순서 문제가없고 BOM이 필요하지 않습니다. 문자 U + FEFF는 UTF-8 파일의 시작 부분에서 의미가 없으므로 어쨌든 호환성에 대한 해로운 영향과 별도로 포함되어서는 안됩니다. 불행하게도 Microsoft는 가짜 BOM을 좋아하고 그만하도록 설득 할 수 없습니다. – bobince

답변

3

이것은 대부분 BOM입니다. 그것을 추가하는 파일을 찾으십시오 (PHP 포함 중 하나 일 수 있음) 편집기없이 파일을 저장하도록 설정하십시오.

이를 제거하는 여러 가지 방법은 this question을 참조하십시오.

+0

하! 나는 원래 이것을 보았지만 "메모장에서 보지 못했기 때문에 그것을 기각했다."BOM없이 UTF-8로 변환하는 옵션이 있다는 것을 깨닫지 못했다. 도와 주셔서 감사합니다! –

1

이것은 byte-order mark (BOM)이라고합니다. UTF-8에서는 완전히 불필요하지만 Windows 시스템에서는 파일의 처음 부분에 추가합니다.

옵션 ("BOM이없는 UTF-8")을 사용하거나 문자 (3 바이트)를 삭제하여 16 진수보기로 좋은 편집기에서 제거 할 수 있습니다.

관련 문제