很多时候,我都使用了自己“学会”的一种css技巧。当我依赖于可以将其放在 html 文档中的动态样式表时,我使用的 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 中的 Dev Tools)上,Network 选项卡中浏览器尝试查找的 url 是:
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 编辑我的文件,在我的首选项 -> 新文档中,包含 BOM 签名的选项已关闭!!
最佳答案
问题是您在 PHP 中包含了具有 UTF-8 BOM 的文件。
虽然你看不到这个BOM(Byte Order Mark),但是你可以想象现实中包含的文件是这样的:
%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。
关于php - 动态 css 样式表的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8214171/