ファイルの先頭からを削除するにはどうすればよいですか?


145

geditを使用してそれを開くと問題なく見えるCSSファイルがありますが、それがPHPによって読み込まれると(すべてのCSSファイルを1つにマージするため)、このCSSには次の文字が付加されます::»¿

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

私は問題をググりました、そしてファイルエンコーディングに明らかに何か問題があります。それは私がftpとrsyncを介してさまざまなLinux / Windowsサーバーにファイルをシフトし、さまざまなテキストエディターを使用しているので理にかなっています。私は文字エンコーディングについてあまり知らないので、助けていただければ幸いです。

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


これで問題は解決したようです。95isalive.com/expression/index.html

30
誰かが私たちをBOMから引き離します
デビッドヘファーナン2011

回答:


150

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

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

これは、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...
  ?>

ええ、グーグルで見つけたのですが、どうすれば削除できますか?
Matt

10
BOMは削除されませんが、無視されます。
コールジョンソン

または、他の方法(無視)でエンコードを変更することもできます。
mr5、2015年

Windows Notepad(ugh)がそれらを追加します。この質問の重複からの提案は、Notepad ++を使用することです。これにより、エンコーディングとして「BOMなしのUTF-8」を設定できます。または、リアルエディターを使用します...(emacs!):-)
jesup

2
それがまさに問題です。異なる文字エンコーディングは、同じ文字に対して異なるバイトを使用します。答えの3番目の段落をもう一度読んでください。
Vinko Vrsalovic

24

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


1
Notepad ++ v7.6.6(64ビット)では、[ UTF-8に変換 ]をクリックする必要があります。
ストーマ

23

ではPHP、あなたは、問題の文字を含むすべての非文字を削除するには、次の操作を行うことができます。

$response = preg_replace('/[\x00-\x1F\x80-\xFF]/', '', $response);

1
"ï"を強制終了する場合は、この$ response = preg_replace( '/ [\ x80- \ xFF] //'、 ''、$ response);を使用します。
guido _nhcol.com.br_ 2017年

@ guido_nhcol.com.br_あなたは余分を追加し/、それは次のようになります$response = preg_replace('/[\x80-\xFF]/', '', $response);
HAßdøμ

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

1
grep -rlI $'\xEF\xBB\xBF' .バイナリファイルを無視するために使用します。
Nabi KAZ 2015年

11

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

UTF-8からBOMを削除します

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

PHPに簡単に変換できると思います。


6
BOMは文字のシーケンスではなく、単一の文字であることに注意してください。ファイルがUTF-8の場合、文字は3 バイトで表されます。ファイルがUTF-8である場合、別のエンコーディング(つまり、BOMがあるはずの場所にEF BB BFが表示されるエンコーディング)で表示するとエラーになります。UTF-8ファイルからBOMを削除するには、(単一の)文字U + FEFFを削除する必要があります。うん、ペダントリー!
ジェフリーLホイットリッジ

1
私はそれをPHPで機能させることができなかった(それは私の能力ではなく、あなたの:Pではない)ので、BOMがあるかどうかを確認し、最初の3文字を削除しました。必要な場合のコードは次のとおりです。if(substr($ css、0,3)== pack( "CCC"、0xef、0xbb、0xbf)){$ css = substr($ css、3); }
Matt

7
これはphpに変換され$string = preg_replace('/\x{EF}\x{BB}\x{BF}/','',$string);ます。これを使用する前に、代わりにソースで問題を修正できないかどうか再検討してください。
commonpike、2011年

6

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

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

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


5

PHPがわからないので、それが可能かどうかはわかりませんが、最善の解決策は、他のエンコードではなくUTF-8としてファイルを読み取ることです。BOMは、実際にはZERO WIDTH NO BREAK SPACEです。これは空白なので、ファイルが正しいエンコーディング(UTF-8)で読み取られている場合、BOMは空白として解釈され、結果のCSSファイルでは無視されます。

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


3

使用できます

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

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


2

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


grep -rlI $'\xEF\xBB\xBF' .バイナリファイルを無視するために使用します。そして.*ここよりも良い。
Nabi KAZ 2015年

2

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

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



2

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

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


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\"?" . ">";

1

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

個人的にはE Text Editorを使用しています。

右下に、BOMタグなどの文字エンコーディングのオプションがあります。ファイルをロードし、[バイトオーダーマーカー]が選択されている場合は選択を解除し、再保存してください。

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

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


1
画像リンクが壊れています。
Peter Mortensen、2015年

1

あなたはPhpStormでそれを開き、ファイルを右クリックしてBOMの削除をクリックすることができます...


1

BOMに関する問題の別の良い解決策を次に示します。これらは2つのVBScriptです(.vbs)スクリプトです。

1つはファイル内のBOMを検索するためのもので、もう1つはファイル内でのろわれたBOMをKILLするためのものです。それはかなりうまく機能し、使いやすいです。

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

VBScriptスクリプトは、疑わしいファイルを.vbsファイルにドラッグアンドドロップするだけで使用できます。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ファイルを作成し、suspiciosファイルを.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

コードはHeiko Jendreckからです


1

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


0

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


0

Total Commanderを使用して、すべてのBOMされたファイルを検索します。

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

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

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

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

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

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


0

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

私の場合、私には2つの異なる解決策がありました:

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

AddDefaultCharset ISO-8859-1

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


0
  1. filename.cssファイルのテキストをコピーします。
  2. cssファイルを閉じます。
  3. ファイル名の衝突を避けるために、ファイル名をfilename2.cssに変更します。
  4. MS NotepadまたはWordpadで、新しいファイルを作成します。
  5. その中にテキストを貼り付けます。
  6. エンコードオプションからUTF-8を選択して、filename.cssとして保存します。
  7. filename.cssをアップロードします。

-3

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

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.