programing

파일의 선두에서 「」를 삭제하려면 어떻게 해야 합니까?

goodcopy 2023. 1. 10. 21:18
반응형

파일의 선두에서 「」를 삭제하려면 어떻게 해야 합니까?

gedit을 사용하여 열었을 때는 문제가 없는 CSS 파일이 있습니다만, PHP에 의해서 읽혀지면(모든 CSS 파일을 1개로 Marge 하기 위해서), 이 CSS에는 다음의 문자가 부가되어 있습니다.

PHP 에서는 공백이 모두 삭제되기 때문에 코드 중간에 랜덤으로 「」가 있으면, 모든 것이 엉망이 됩니다.말씀드렸듯이 파일을 gedit으로 열면 실제로 이러한 문자가 보이지 않기 때문에 쉽게 삭제할 수 없습니다.

이 문제를 구글로 검색해 보니 파일 인코딩에 문제가 있는 것이 분명합니다.파일 인코딩은 ftp와 rsync를 통해 다양한 텍스트 에디터를 사용하여 파일을 다른 Linux/Windows 서버로 옮기고 있기 때문에 의미가 있습니다.저는 문자 인코딩에 대해 잘 모르기 때문에 도움을 주시면 감사하겠습니다.

이 경우 파일은 UTF-8 형식으로 저장되며 gedit에서는 ISO-8859-15 형식으로 저장할 수 없습니다(이 문서에는 지정된 문자 인코딩을 사용하여 인코딩할 수 없는 문자가 하나 이상 포함되어 있습니다).Windows 및 Linux 라인 엔딩으로 저장하려고 했지만 둘 다 도움이 되지 않았습니다.

세 가지 말씀 드리겠습니다.

바이트 순서 표시(BOM)

ISO-8859-1의 UTF-8 BOM을 나타냅니다.BOM을 사용하지 않도록 편집자에게 지시하거나 다른 편집기를 사용하여 삭제해야 합니다.

하려면 BOM을 합니다.awk질문에 나타난 바와 같이

다른 답변에서 말하듯이, PHP가 실제로 BOM을 올바르게 해석하는 것이 가장 좋습니다.그러면 다음과 같이 사용할 수 있습니다.

 <?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...
  ?>

메모장++에서 파일을 엽니다.[ Encoding ]메뉴에서 [Convert to UTF-8 without BOM]를 선택하고 파일을 저장한 후 오래된 파일을 이 새 파일로 바꿉니다.그리고 분명 효과가 있을 것이다.

PHP에서는, 다음의 조작을 실시해, 문제의 문자를 포함한 모든 비문자를 삭제할 수 있습니다.

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

셸 액세스 권한을 가진 사용자는 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

BOM은 일련의 문자(UTF-8의 경우 $EF $BB $BF)일 뿐이므로 스크립트를 사용하여 삭제하거나 추가되지 않도록 편집기를 구성하십시오.

UTF-8에서 BOM 삭제부터:

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

PHP로 쉽게 번역할 수 있을 거예요.

저는 PHP를 모르기 때문에 이것이 가능한지 모르겠지만, 가장 좋은 해결책은 다른 인코딩이 아닌 UTF-8로 파일을 읽는 것입니다.BOM은 실제로는 제로 폭 No Break 공간입니다.이것은 공백이기 때문에, 파일이 올바른 부호화(UTF-8)로 읽혀지고 있는 경우, BOM은 공백으로 해석되어 결과적으로 생성되는 CSS 파일에서는 무시됩니다.

또한 올바른 인코딩으로 파일을 읽는 것의 또 다른 장점은 문자가 잘못 해석될 염려가 없다는 것입니다.편집자가 코드 페이지를 저장할 때 필요한 문자가 모두 표시되지 않는다고 합니다.PHP가 잘못된 인코딩으로 파일을 읽는 경우 BOM 이외의 다른 문자가 자동으로 잘못 해석될 수 있습니다.UTF-8을 어디에나 사용하면, 이러한 문제는 해소됩니다.

저는 이 방법이 효과가 있었습니다.

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

이 메타데이터를 삭제하면, 「」가 다시 표시됩니다.이게 도움이 됐으면 좋겠는데...

사용할 수 있습니다.

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

awk로 교체하는 것은 효과가 있는 것 같지만, 제대로 되어 있지 않습니다.

grep - exef \ xBB \ xBF " * | xargs vim - e - c 'set do set fileencoding = utf-8| set nobm| wq'

I had the same problem with the BOM appearing in some of my PHP files ().

PhpStorm을 사용하는 경우 설정 -> IDE 설정 -> 키맵 -> 메인메뉴 -> 파일 -> BOM 삭제에서 단축키를 설정하여 삭제할 수 있습니다.

Notepad++에서 "Encode" 메뉴를 선택한 다음 "Encode in UTF-8 without BOM"을 선택하고 저장합니다.

스택 오버플로우 질문 BOM 없이 UTF-8에 텍스트를 저장하는 메모장을 만드는 방법을 참조하십시오.

문제의 PHP 파일을 Notepad++에서 엽니다.

맨 위에 있는 인코딩을 클릭하고 "BOM 없이 UTF-8에서 인코딩"에서 "UTF-8에서 인코딩"으로 변경합니다. 서버에 파일을 저장하고 덮어씁니다.

같은 문제, 다른 해결책.

PHP 파일의 한 줄은 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\"?" . ">";

UTF-8 부호화 파일에서 BOM을 삭제할 필요가 있는 경우 먼저 해당 파일을 인식하고 있는 에디터를 입수해야 합니다.

저는 개인적으로 E Text Editor를 사용하고 있습니다.

오른쪽 아래에는 BOM 태그를 포함한 문자 인코딩 옵션이 있습니다.파일을 로드하고 선택한 경우 바이트 순서 마커를 선택 취소한 다음 다시 저장하면 됩니다.

Alt 텍스트 http://oth4.com/encoding.png

E는 무료는 아니지만 무료 체험판이 있어 뛰어난 에디터입니다(Text Mate 호환성이 한정되어 있습니다).

PhpStorm으로 열고 파일을 오른쪽 클릭하여 [Remove BOM...]을 클릭합니다.

여기 BOM 문제에 대한 또 다른 좋은 해결책이 있습니다.이것들은 2개의 VBScript(.vbs) 스크립트입니다.

하나는 파일에서 BOM을 찾기 위한 것이고 다른 하나는 파일에서 저주받은 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이 있는 경우 다음 코드를 사용하여 두 번째 .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

암호는 Heiko Jendreck에서 온 거야.

및 에 , 것은 경우는, PHPStorm 의 BOM 을 할 수 있습니다.\x{FEFF}(정규 표현식) 및 아무것도 아닌 것으로 대체합니다.

같은 문제지만, 1개의 파일만 영향을 받았기 때문에 빈 파일을 만들고 원래 파일에서 새 파일로 코드를 복사/붙여넣은 후 원래 파일을 교체했습니다.화려하진 않지만 효과가 있었다.

Total Commander를 사용하여 모든 BOM 파일을 검색합니다.

BOM을 사용하여 UTF-8 파일을 검색하는 우아한 방법?

  • Eclipse와 같은 적절한 편집기(BOM을 인식하는)에서 이러한 파일을 엽니다.

  • 파일의 인코딩을 ISO(우클릭, 속성)로 변경합니다.

  • 파일의 선두에서 「」를 잘라, 보존합니다.

  • 파일의 인코딩을 UTF-8로 되돌립니다.

...그리고 다시는 n...d를 사용할 생각도 하지 마세요!

저도 같은 문제가 있었어요.문제는 내 php 파일 중 하나가 utf-8(가장 중요한 것은 모든 php 파일에 포함된 구성 파일)이기 때문입니다.

제 경우, 두 가지 다른 솔루션이 효과가 있었습니다.

먼저 Configuration파일(또는 .htaccess)에서 AddDefaultCharsetDirective를 사용하여 Apache Configuration을 변경했습니다.이 솔루션은 Apache가 올바른 인코딩을 사용하도록 강제합니다.

AddDefaultCharset ISO-8859-1

두 번째 해결책은 php 파일의 잘못된 인코딩을 변경하는 것이었습니다.

  1. filename.css 파일의 텍스트를 복사합니다.
  2. css 파일을 닫습니다.
  3. 파일명의 경합을 피하기 위해서, filename2.css 의 이름을 변경합니다.
  4. MS 메모장 또는 워드패드에서 새 파일을 만듭니다.
  5. 텍스트를 붙여넣습니다.
  6. 인코딩 옵션에서 UTF-8을 선택하고 filename.css로 저장합니다.
  7. filename.css를 업로드 합니다.

이거면 돼!

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

체크 인index.php, "..."를 찾습니다. charset=iso-8859-1"로 대체해 주세요. charset=utf-8".

아마 효과가 있을 거야.

언급URL : https://stackoverflow.com/questions/3255993/how-do-i-remove-%c3%af-from-the-beginning-of-a-file

반응형