Mat*_*att 140 php byte-order-mark utf-8 character-encoding mojibake
我有一个CSS文件,当我使用gedit打开它时看起来很好,但是当它被PHP读取(将所有CSS文件合并为一个)时,这个CSS前面有以下字符:
PHP删除所有空格,因此代码中间的随机会弄乱整个事物.正如我所提到的,当我在gedit中打开文件时,我实际上看不到这些字符,因此我无法轻易删除它们.
我搜索了问题,文件编码显然有问题,这是有道理的,因为我已经通过ftp和rsync将文件转移到不同的Linux/Windows服务器,并使用一系列文本编辑器.我不太了解字符编码,所以请帮助.
如果有帮助,文件将以UTF-8格式保存,gedit将不允许我以ISO-8859-15格式保存(该文档包含一个或多个无法使用指定字符编码进行编码的字符).我尝试用Windows和Linux行结尾保存它,但都没有帮助.
Vin*_*vic 143
三个字给你:
这是ISO-8859-1中UTF-8 BOM的表示.您必须告诉编辑不要使用BOM或使用其他编辑器去除它们.
为了使自动化的BOM的去除可以用awk
如图这一问题.
正如另一个答案所说,最好的是让PHP真正正确地解释BOM,你可以使用mb_internal_encoding()
,如下所示:
<?php
//Storing the previous encoding in case you have some other piece
//of code sensitive to encoding and counting on the default value.
$previous_encoding = mb_internal_encoding();
//Set the encoding to UTF-8, so when reading files it ignores the BOM
mb_internal_encoding('UTF-8');
//Process the CSS files...
//Finally, return to the previous encoding
mb_internal_encoding($previous_encoding);
//Rest of the code...
?>
Run Code Online (Sandbox Code Playgroud)
V.R*_*han 22
在Notepad ++中打开您的文件.从" 编码"菜单中,选择" 转换为不带BOM的UTF-8",保存文件,将旧文件替换为此新文件.该死的确有效.
小智 21
在PHP中,您可以执行以下操作来删除所有非字符,包括相关字符.
$response = preg_replace('/[\x00-\x1F\x80-\xFF]/', '', $response);
Run Code Online (Sandbox Code Playgroud)
Die*_*mar 20
对于那些有shell访问权限的人来说,这是一个小命令,可以在public_html目录中找到BOM设置的所有文件 - 请务必将其更改为服务器上正确的路径
码:
grep -rl $'\xEF\xBB\xBF' /home/username/public_html
Run Code Online (Sandbox Code Playgroud)
vi /path-to-file-name/file.php
Run Code Online (Sandbox Code Playgroud)
并输入命令以删除BOM:
set nobomb
Run Code Online (Sandbox Code Playgroud)
保存文件:
wq
Run Code Online (Sandbox Code Playgroud)
Eug*_*ota 11
BOM只是一系列字符(UTF-8的$ EF $ BB $ BF),所以只需使用脚本删除它们或配置编辑器就不会添加它们.
#!/usr/bin/perl
@file=<>;
$file[0] =~ s/^\xEF\xBB\xBF//;
print(@file);
Run Code Online (Sandbox Code Playgroud)
我确信它很容易转换为PHP.
小智 6
对我来说,这工作:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
Run Code Online (Sandbox Code Playgroud)
如果我删除此元,则再次出现 希望这有助于某人......
我不知道PHP,所以我不知道这是否可行,但最好的解决方案是将文件读取为UTF-8而不是其他编码.BOM实际上是一个零宽度无空间.这是空格,因此如果以正确的编码(UTF-8)读取文件,则BOM将被解释为空格,并且在生成的CSS文件中将被忽略.
此外,以正确的编码方式读取文件的另一个好处是,您不必担心字符被误解.您的编辑告诉您,要保存的代码页将不会执行您需要的所有字符.如果PHP然后以不正确的编码读取文件,那么除了BOM之外的其他字符很可能被默默地误解.到处使用UTF-8,这些问题就消失了.
归档时间: |
|
查看次数: |
186699 次 |
最近记录: |