web-dev-qa-db-ja.com

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

gedit を使用して開くと正常に見えるCSSファイルがありますが、PHP(すべてのCSSファイルを1つにマージするため)によって読み取られると、このCSSには次のようになります。先頭に文字を追加:ï"¿

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

私は問題をグーグルで調べましたが、明らかにファイルエンコーディングに問題があります。これは、ファイルをftpと rsync を介して異なるLinux/Windowsサーバーに移動しているので意味がありますテキストエディタの。しかし、文字エンコーディングについてはあまり知りませんので、助けていただければ幸いです。

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

133
Matt

あなたのための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...
  ?>
138
Vinko Vrsalovic

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

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

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

21
V.Rohan

シェルアクセスを使用する場合は、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
19
Diego Palomar

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

TF-8からのBOMの削除

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

簡単にPHPに翻訳されると確信しています。

11
Eugene Yokota

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

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

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

6
NickWebman

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

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

5

使用できます

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

Awkに置き換えることは機能しているように見えますが、適切ではありません。

3
till

いくつかのPHPファイル(ï"¿ï"¿)に表示されるBOMで同じ問題が発生しました。

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

2
Toby

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

スタックオーバーフローの質問BOMを使用せずにUTF-8でテキストを保存するメモ帳の作成方法を参照してください。

2
Curtis Yallop

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

2
Simone

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

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

2
Problem Solved

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

1

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

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

右下には、BOMタグを含む文字エンコードのオプションがあります。ファイルをロードし、Byte Order Markerが選択されている場合は選択を解除し、保存し直します。

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

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

1
dmp

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

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
D G

PhpStorm で開くことができ、ファイルを右クリックしてRemove BOM...をクリックします。

1
behtateam

BOMの問題に対する別の優れたソリューションを次に示します。これらは、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ファイルを作成し、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
NoEs

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

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

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

AddDefaultCharset ISO-8859-1

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

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

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

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

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

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

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

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

...また、n ... dの使用については考えないでください!

0
Jan Przybylo

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

0
jiminy