动态css样式表的奇怪行为

时间:2011-11-21 15:28:41

标签: php css

很多时候我使用过我自己“学习”的css技术。当我依赖于动态样式表,我可以把它放在html doc上时,我使用的css文件实际上不是css,它们是php文件。示例:style.css.php。总是工作。但是现在我在一个我从未见过的奇怪行为中遇到麻烦。我的fundo.css.php文件格式简单:

body {
    background: url(../arquivos/imagens/<?php

// some php functions.. 
echo "coyote.jpg";

?>) top left no-repeat;
}

它将此响应发送到浏览器:

body {
    background: url(../arquivos/imagens/coyote.jpg) top left no-repeat;
}

漂亮,但如果浏览器显示背景!在网络标签中的 Firebug 控制台(与 Chrome工具中的 Chrome 一样)中,浏览器尝试查找的网址为:

http://localhost:8080/ultimocaso/arquivos/imagens/%EF%BB%BF%EF%BB%BF%EF%BB%BF%EF%BB%BF%EF%BB%BFcoyote.jpg

如果我只使用带有该内容的css普通文件,它就像魅力一样。

任何人都知道告诉我为什么会发生这种情况和/或如何解决它?

修改

我使用Adobe Dreamweaver编辑我的文件并在我的偏好设置中 - &gt;新文档包含BOM签名的选项为OFF !!

1 个答案:

答案 0 :(得分:2)

问题是您在PHP中包含了具有UTF-8 BOM的文件。

虽然您无法看到此BOM(字节顺序标记),但您可以想象文件实际包含的内容如下所示:

%EF%BB%BF<?php
echo 'this is myinclude.php';
?>

当您使用include功能时,您实际上是在包含代码的位置将这些字符导入到您的文件中。

<?php
// some code
include('myinclude.php');
// some code
?>

实际上解释如下:

<?php
// some code
?>
%EF%BB%BF
<?php
echo 'this is myinclude.php';
?>
<?php
// some code
?>

避免代码中间的BOM的一种方法是将所有内容包含在影响较小的地方,例如在文件的开头。另一种方式(我个人的选择)是以没有BOM的格式保存导入的文件,例如常规的UTF-8。