【发布时间】:2010-08-16 17:30:51
【问题描述】:
我正在使用 PHP 开发一个简单的网站,我很长时间没有接触过这种语言,尤其是当它在 WebMatrix 的 Windows 系统上运行时。最近我一直在将几个网站从 ASP.NET (Umbraco) 移植到 PHP 到一个用 PHP 编写的基本模板类,到目前为止一切进展顺利,直到在 DOCTYPE 之前我的源代码中开始出现一些 unicode 字符. Mozilla 源代码检查器不会显示这些,但是当发布到记事本时会显示两个 unicode 框/字符。
我查看了 Firebug 中的问题,似乎认为所有 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("@$var@", $content, $this->template);
}
function publish() {
eval("?>".$this->template."<?");
}
}
?>
如图所示,设计页面用于每个页面,必要的字段用 at 符号列出(例如<title>@title@</title>)。
我相当肯定 CSS 和 HTML 不是罪魁祸首,因为我在其他网站上使用的代码基本相同,没有任何问题。
编辑: 问题已被发现,但这样做表明,在 Microsoft 的新 WebMatrix 编辑器中编辑 PHP 文件会在保存 PHP 文件时不断导致出现字节顺序标记.如前所述,Notepad++ 在解决此问题方面非常有效,如果您遇到同样的问题,请打开所有必要的文件并转到顶部菜单中的编码并单击 “转换为 UTF-8 而不使用 BOM”。保存后问题应该会消失。
我认为这是 WebMatrix 工具中的一个有效错误,如果我的公司 Internet 在涉及 Windows Live 时不受限制,我将非常乐意提交该错误。如果您碰巧看到它被发布为错误或您自己这样做,那么请对这篇文章发表评论,因为即使存在缺陷,WebMatrix 工具也是 ASP.NET Razor 和 PHP 的出色小编辑器。
【问题讨论】:
-
我不认为这是一个 WebMatrix 错误,因为使用 BOM 启动 UTF-8 文件是完全合理的。在读取 UTF-8 编码文件时,应用程序无法正确解释 BOM,这更像是一个错误。
-
PHP 脚本是基于字节的,而不是 Unicode 字符。 PHP 和任何其他基于字节的工具都无法处理文件开头的随机高字节。请注意,UTF-8 没有字节顺序问题,也不需要 BOM;字符 U+FEFF 在 UTF-8 文件的开头是没有意义的,无论如何都不应该包含在内,除了它对兼容性的有害影响之外。不幸的是,微软喜欢包含虚假 BOM,因此无法被说服停止。