164

geditを使用して開くと見栄えのするCSSファイルがありますが、PHPで読み取ると(すべてのCSSファイルを1つにマージするため)、このCSSには次の文字が付加されます。

PHPはすべての空白を削除するため、コードの途中にあるランダムなが全体を台無しにします。前述したように、geditでファイルを開いたときにこれらの文字が実際に表示されないため、簡単に削除できません。

私は問題をグーグルで検索しましたが、ファイルエンコーディングに明らかに問題があります。これは、さまざまなテキストエディタを使用してftpおよびrsyncを介してファイルを別のLinux/Windowsサーバーに移動しているためです。しかし、私は文字エンコードについてあまりよく知らないので、助けていただければ幸いです。

それが役立つ場合、ファイルはUTF-8形式で保存されており、geditではISO-8859-15形式で保存できません(ドキュメントには、指定された文字エンコードを使用してエンコードできない1つ以上の文字が含まれています)。WindowsとLinuxの行末で保存しようとしましたが、どちらも役に立ちませんでした。

4

23 に答える 23

162

あなたのための3つの言葉:

バイトオーダーマーク(BOM)

これは、ISO-8859-1でのUTF-8BOMの表現です。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...
  ?>
于 2010-07-15T13:37:32.373 に答える
28

Notepad++でファイルを開きます。[エンコード]メニューから、[ BOMなしでUTF-8に変換]を選択し、ファイルを保存して、古いファイルをこの新しいファイルに置き換えます。そして、それはうまくいくでしょう、確かに。

于 2014-12-18T10:50:30.833 に答える
24

PHPでは、次の手順を実行して、問題の文字を含むすべての非文字を削除できます。

$response = preg_replace('/[\x00-\x1F\x80-\xFF]/', '', $response);
于 2013-12-19T21:51:18.743 に答える
20

シェルアクセスを使用している場合は、public_htmlディレクトリにBOMが設定されているすべてのファイルを検索するための小さなコマンドがあります。サーバー上の正しいパスに変更してください。

コード:

grep -rl $'\xEF\xBB\xBF' /home/username/public_html

また、 viエディターに慣れている場合は、ファイルをviで開きます。

vi /path-to-file-name/file.php

そして、BOMを削除するコマンドを入力します。

set nobomb

ファイルを保存します。

wq
于 2013-07-15T13:03:41.813 に答える
11

BOMは単なる文字のシーケンス(UTF-8の場合は$ EF $ BB $ BF)であるため、スクリプトを使用してそれらを削除するか、エディターを構成して追加されないようにします。

UTF-8からのBOMの削除から:

#!/usr/bin/perl
@file=<>;
$file[0] =~ s/^\xEF\xBB\xBF//;
print(@file);

PHPに簡単に変換できると確信しています。

于 2010-07-15T13:55:20.733 に答える
6

PHPがわからないので、これが可能かどうかはわかりませんが、最善の解決策は、ファイルを他のエンコーディングではなくUTF-8として読み取ることです。BOMは、実際にはゼロ幅のブレークスペースではありません。これは空白であるため、ファイルが正しいエンコーディング(UTF-8)で読み取られている場合、BOMは空白として解釈され、結果のCSSファイルでは無視されます。

また、正しいエンコーディングでファイルを読み取ることのもう1つの利点は、文字が誤って解釈されることを心配する必要がないことです。あなたのエディタはあなたがそれを保存したいコードページがあなたが必要とするすべての文字を実行しないとあなたに言っています。PHPが誤ったエンコーディングでファイルを読み取っている場合は、BOM以外の他の文字が黙って誤解されている可能性が非常に高くなります。どこでもUTF-8を使用すると、これらの問題は解消されます。

于 2010-07-15T13:48:01.757 に答える
6

私にとって、これはうまくいきました:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

このメタを削除すると、が再び表示されます。これが誰かを助けることを願っています...

于 2014-11-12T18:53:33.333 に答える
3

使用できます

vim -e -c 'argdo set fileencoding=utf-8|set encoding=utf-8| set nobomb| wq'

awkでの置き換えは機能しているようですが、適切ではありません。

于 2012-04-12T07:28:01.263 に答える
2

一部のPHPファイルにBOMが表示されるという同じ問題が発生しました()。

PhpStormを使用する場合は、ホットキーで設定して、[設定]->[IDE設定]->[キーマップ]->[メインメニュー]->[ファイル]->[BOMの削除]で削除できます。

于 2013-03-08T14:45:37.173 に答える
2

grep -rl $'\ xEF \ xBB \ xBF' * | xargs vim -e -c'argdo set fileencoding = utf-8 | set encoding = utf-8 | 爆弾を設定| wq '

于 2013-11-29T14:13:23.127 に答える
2

Notepad ++で、[エンコード]メニューを選択し、次に[BOMなしでUTF-8でエンコード]を選択します。次に保存します。

StackOverflowの質問を参照してください。メモ帳を作成してBOMなしでUTF-8にテキストを保存するにはどうすればよいですか。

于 2014-07-14T16:41:01.367 に答える
2

問題のPHPファイルをNotepad++で開きます。

上部の[エンコード]をクリックして、[BOMなしのUTF-8でのエンコード]から[UTF-8でのエンコード]に変更します。サーバー上のファイルを保存して上書きします。

于 2015-10-21T06:55:54.110 に答える
1

UTF-8でエンコードされたファイルからBOMを削除できるようにする必要がある場合は、最初にそれらを認識しているエディターを入手する必要があります。

私は個人的にEテキストエディタを使用しています。

右下には、BOMタグを含む文字エンコードのオプションがあります。ファイルをロードし、バイト順マーカーが選択されている場合は選択を解除し、再保存します。これを実行する必要があります。

代替テキストhttp://oth4.com/encoding.png

Eは無料ではありませんが、無料の試用版があり、優れたエディターです(TextMateとの互換性が制限されています)。

于 2010-07-15T13:42:16.960 に答える
1

同じ問題、異なる解決策。

PHPファイルの1行は、XMLヘッダー(PHPと同じ開始/終了タグを使用)を出力していました。これらのタグ内のコードがエンコーディングを設定し、PHP内で実行されたため、奇妙な文字が生成されたようです。いずれにせよ、ここに解決策があります:

# Original
$xml_string = "&lt;?xml version=\"1.0\" encoding=\"UTF-8\"?&gt;";

# fixed
$xml_string = "<" . "?xml version=\"1.0\" encoding=\"UTF-8\"?" . ">";
于 2011-09-08T15:28:11.497 に答える
1

PhpStormで開き、ファイルを右クリックして[ BOMの削除... ]をクリックします。

于 2013-08-18T19:53:39.650 に答える
1

これがBOMの問題に対するもう1つの良い解決策です。これらは2つのVBScript(.vbs)スクリプトです。

1つはファイル内のBOMを見つけるためのもので、もう1つはファイル内の気の毒なBOMを殺すためのものです。それはかなりうまく機能し、使いやすいです。

.vbsファイルを作成し、その中に次のコードを貼り付けるだけです。

疑わしいファイルを.vbsファイルにドラッグアンドドロップするだけで、VBScriptスクリプトを使用できます。BOMがあるかどうかがわかります。

' Heiko Jendreck - personal helpdesk & webdesign
' http://www.phw-jendreck.de
' 2010.05.10 Vers 1.0
'
' find_BOM.vbs
' ====================
' Kleines Hilfsmittel, welches das BOM finden soll
'
 Const UTF8_BOM = ""
 Const UTF16BE_BOM = "þÿ"
 Const UTF16LE_BOM = "ÿþ"
 Const ForReading = 1
 Const ForWriting = 2
 Dim fso
 Set fso = WScript.CreateObject("Scripting.FileSystemObject")
 Dim f
 f = WScript.Arguments.Item(0)
 Dim t
 t = fso.OpenTextFile(f, ForReading).ReadAll
 If Left(t, 3) = UTF8_BOM Then
     MsgBox "UTF-8-BOM detected!"
 ElseIf Left(t, 2) = UTF16BE_BOM Then
     MsgBox "UTF-16-BOM (Big Endian) detected!"
 ElseIf Left(t, 2) = UTF16LE_BOM Then
     MsgBox "UTF-16-BOM (Little Endian) detected!"
 Else
     MsgBox "No BOM detected!"
 End If

BOMがあることが表示された場合は、次のコードを使用して2番目の.vbsファイルを作成し、疑わしいファイルを.vbsファイルにドラッグします。

' Heiko Jendreck - personal helpdesk & webdesign
' http://www.phw-jendreck.de
' 2010.05.10 Vers 1.0
'
' kill_BOM.vbs
' ====================
' Kleines Hilfmittel, welches das gefundene BOM löschen soll
'
Const UTF8_BOM = ""
Const ForReading = 1
Const ForWriting = 2
Dim fso
Set fso = WScript.CreateObject("Scripting.FileSystemObject")
Dim f
f = WScript.Arguments.Item(0)
Dim t
t = fso.OpenTextFile(f, ForReading).ReadAll
If Left(t, 3) = UTF8_BOM Then
    fso.OpenTextFile(f, ForWriting).Write (Mid(t, 4))
    MsgBox "BOM gelöscht!"
Else
    MsgBox "Kein UTF-8-BOM vorhanden!"
End If

コードはHeikoJendreckからのものです。

于 2014-08-22T13:53:20.267 に答える
1

PHPStormでは、複数のファイルとBOMが必ずしもファイルの先頭にあるとは限らない場合、\x{FEFF}(正規表現)を検索して、何も置き換えないようにすることができます。

于 2018-02-22T03:43:12.900 に答える
0

Total Commanderを使用して、すべてのBOMedファイルを検索します。

BOMでUTF-8ファイルを検索するエレガントな方法は?

  • これらのファイルをEclipseなどの適切なエディター(BOMを認識する)で開きます。

  • ファイルのエンコーディングをISOに変更します(右クリック、プロパティ)。

  • ファイルの先頭から切り取って保存します

  • ファイルのエンコーディングをUTF-8に戻します

...そしてn...dを再び使用することさえ考えないでください!

于 2011-09-19T23:28:15.230 に答える
0

同じ問題ですが、影響を受けるのは1つのファイルだけだったので、空のファイルを作成し、元のファイルから新しいファイルにコードをコピーして貼り付けてから、元のファイルを置き換えました。派手ではありませんが、うまくいきました。

于 2014-04-30T20:39:43.587 に答える
0

私も同じ問題を抱えていました。問題は、私のphpファイルの1つがutf-8(最も重要なのは、すべてのphpファイルに含まれている構成ファイル)にあったためです。

私の場合、私は私のために働いた2つの異なる解決策を持っていました:

まず、構成ファイル(または.htaccess)でAddDefaultCharsetDirectiveを使用してApache構成を変更しました。このソリューションは、Apacheに正しいエンコードを使用するように強制します。

AddDefaultCharset ISO-8859-1

2番目の解決策は、phpファイルの不正なエンコーディングを変更することでした。

于 2016-02-11T07:59:47.357 に答える
0
  1. filename.cssファイルのテキストをコピーします。
  2. cssファイルを閉じます。
  3. ファイル名の衝突を避けるために、filename2.cssという名前に変更します。
  4. MSメモ帳またはワードパッドで、新しいファイルを作成します。
  5. その中にテキストを貼り付けます。
  6. エンコーディングオプションからUTF-8を選択して、filename.cssとして保存します。
  7. filename.cssをアップロードします。
于 2017-12-12T18:42:48.450 に答える
0

これは私のために働きます!

def removeBOMs(fileName):
     BOMs = ['',#Bytes as CP1252 characters
    'þÿ',
    'ÿþ',
    '^@^@þÿ',
    'ÿþ^@^@',
    '+/v',
    '÷dL',
    'Ýsfs',
    'Ýsfs',
    '^Nþÿ',
    'ûî(',
    '„1•3']
     inputFile = open(fileName, 'r')
     contents = inputFile.read()
     for BOM in BOMs:
         if not BOM in contents:#no BOM in the file...
             pass
         else:
             newContents = contents.replace(BOM,'', 1)
             newFile = open(fileName, 'w')
             newFile.write(newContents)
             return None
于 2020-10-19T17:14:20.460 に答える
-3

を確認し、 「...」をindex.php見つけて「... charset=iso-8859-1」に置き換えますcharset=utf-8

多分それはうまくいくでしょう。

于 2013-04-14T19:25:19.877 に答える