【问题标题】:Unicode characters at top of page causing gap in WebMatrix页面顶部的 Unicode 字符导致 WebMatrix 出现间隙
【发布时间】: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 符号列出(例如&lt;title&gt;@title@&lt;/title&gt;)。

我相当肯定 CSS 和 HTML 不是罪魁祸首,因为我在其他网站上使用的代码基本相同,没有任何问题。


编辑: 问题已被发现,但这样做表明,在 Microsoft 的新 WebMatrix 编辑器中编辑 PHP 文件会在保存 PHP 文件时不断导致出现字节顺序标记.如前所述,Notepad++ 在解决此问题方面非常有效,如果您遇到同样的问题,请打开所有必要的文件并转到顶部菜单中的编码并单击 “转换为 UTF-8 而不使用 BOM”。保存后问题应该会消失。

我认为这是 WebMatrix 工具中的一个有效错误,如果我的公司 Internet 在涉及 Windows Live 时不受限制,我将非常乐意提交该错误。如果您碰巧看到它被发布为错误或您自己这样做,那么请对这篇文章发表评论,因为即使存在缺陷,WebMatrix 工具也是 ASP.NET Razor 和 PHP 的出色小编辑器。

【问题讨论】:

  • 参见例如这个问题:stackoverflow.com/questions/1814258/…
  • 我不认为这是一个 WebMatrix 错误,因为使用 BOM 启动 UTF-8 文件是完全合理的。在读取 UTF-8 编码文件时,应用程序无法正确解释 BOM,这更像是一个错误。
  • PHP 脚本是基于字节的,而不是 Unicode 字符。 PHP 和任何其他基于字节的工具都无法处理文件开头的随机高字节。请注意,UTF-8 没有字节顺序问题,也不需要 BOM;字符 U+FEFF 在 UTF-8 文件的开头是没有意义的,无论如何都不应该包含在内,除了它对兼容性的有害影响之外。不幸的是,微软喜欢包含虚假 BOM,因此无法被说服停止。

标签: php html css unicode


【解决方案1】:

这很可能是BOM。尝试找到添加它的文件(它可能是 PHP 包含的文件之一)并设置您的编辑器以在没有它的情况下保存文件。

请参阅this question 了解一些删除它的方法。

【讨论】:

  • 哈!我最初看过这个,但因为我自己在 Notepad++ 中看不到它而忽略了它,没有意识到有“在没有 BOM 的情况下转换为 UTF-8”的选项。感谢您的帮助!
【解决方案2】:

这称为byte-order mark (BOM)。 UTF-8 完全没有必要,但 Windows 系统喜欢将其添加到文件的开头。

您可以通过使用一个选项(“UTF-8 without BOM”)或在十六进制视图中通过删除字符(3 个字节)在一个好的编辑器中删除它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-22
    • 2012-05-21
    • 1970-01-01
    • 1970-01-01
    • 2012-10-22
    • 2018-02-28
    • 1970-01-01
    相关资源
    最近更新 更多