मैं फ़ाइल की शुरुआत से ¿»ï कैसे निकालूं?


145

मेरे पास एक सीएसएस फ़ाइल है जो ठीक है जब मैं इसे gedit का उपयोग करके खोलता हूं , लेकिन जब इसे PHP द्वारा पढ़ा जाता है (सभी सीएसएस फ़ाइलों को एक में विलय करने के लिए), तो इस सीएसएस में निम्नलिखित वर्ण हैं: p »that

PHP सभी व्हाट्सएप को हटा देती है, इसलिए कोड के बीच में एक यादृच्छिक ¿»ites पूरी चीज़ को गड़बड़ कर देता है। जैसा कि मैंने उल्लेख किया है, मैं वास्तव में इन पात्रों को नहीं देख सकता जब मैं फ़ाइल को gedit में खोलता हूं, तो मैं उन्हें बहुत आसानी से नहीं निकाल सकता।

मैंने समस्या को googled किया, और फ़ाइल एन्कोडिंग के साथ स्पष्ट रूप से कुछ गड़बड़ है, जो समझ में आता है क्योंकि मैंने फ़ाइलों को अलग-अलग लिनक्स / विंडोज सर्वरों में ftp और rsync के माध्यम से पाठ संपादकों की एक श्रृंखला के साथ स्थानांतरित किया है । मुझे वास्तव में चरित्र एन्कोडिंग के बारे में बहुत कुछ पता नहीं है, इसलिए मदद की सराहना की जाएगी।

यदि यह मदद करता है, तो फ़ाइल को UTF-8 प्रारूप में सहेजा जा रहा है, और gedit मुझे इसे ISO-8859-15 प्रारूप में सहेजने नहीं देगा (दस्तावेज़ में एक या अधिक वर्ण हैं जो निर्दिष्ट वर्ण एन्कोडिंग का उपयोग करके एन्कोड नहीं किया जा सकता है)। मैंने इसे विंडोज और लिनक्स लाइन अंत के साथ सहेजने की कोशिश की, लेकिन न तो मदद की।


यह समस्या को हल करने के लिए प्रकट होता है। 95isalive.com/expression/index.html

30
किसी ने हमें BOM से हटा दिया
डेविड हेफर्नन

जवाबों:


150

आपके लिए तीन शब्द:

बाइट ऑर्डर मार्क (BOM)

यह ISO-8859-1 में UTF-8 BOM के लिए प्रतिनिधित्व है। आपको अपने संपादक को BOMs का उपयोग नहीं करने या उन्हें अलग करने के लिए एक अलग संपादक का उपयोग करना होगा।

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

हाँ, मैंने पाया कि जब मैंने इसे देखा, लेकिन मैं उन्हें कैसे हटाऊँ?
मैट

10
यह BOM को नहीं हटाता है, इसे अनदेखा करता है।
कोल जॉनसन

या दूसरा तरीका (अनदेखा) एन्कोडिंग को बदल सकता है।
mr5

विंडोज नोटपैड (ugh) उन्हें जोड़ता है; इस प्रश्न के एक बिंदु से सुझाव नोटपैड ++ का उपयोग करना है, जो एन्कोडिंग के रूप में "बीओएम बिना बीओएम" सेट करने की अनुमति देता है। या एक वास्तविक संपादक का उपयोग करें ... (emacs!) :-)
jesup

2
यह वास्तव में मुद्दा है, विभिन्न वर्ण एन्कोडिंग एक ही वर्ण के लिए अलग-अलग बाइट्स का उपयोग करते हैं। उत्तर का तीसरा पैराग्राफ फिर से पढ़ें।
विन्को वेर्सालोविच

24

नोटपैड ++ में अपनी फ़ाइल खोलें । से एन्कोडिंग मेनू से, बीओएम बिना UTF-8 में Convert , फ़ाइल को बचाने, इस नए फ़ाइल के साथ पुरानी फाइल की जगह। और यह काम करेगा, लानत है।


1
नोटपैड ++ v7.6.6 (64-बिट) में आपको कन्वर्ट को UTF-8 पर क्लिक करना होगा
19 को

23

में पीएचपी , आप प्रश्न में चरित्र सहित सभी गैर पात्रों को दूर करने के निम्नलिखित कर सकते हैं।

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

1
यदि आप "$" को मारना चाहते हैं तो इस $ प्रतिक्रिया का उपयोग करें = preg_replace ('/ / [\ x80- \ xFF] //', '', $ प्रतिक्रिया);
गाइडो _nhcol.com.br_

@ guideo_nhcol.com.br_ आप एक अतिरिक्त जोड़ते हैं /, यह होना चाहिए:$response = preg_replace('/[\x80-\xFF]/', '', $response);
H A_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' .बाइनरी फ़ाइलों को अनदेखा करने के लिए उपयोग करें ।
नबी काज

11

BOM केवल वर्णों का एक क्रम है (UTF-8 के लिए $ EF $ BB $ BF), इसलिए बस उन्हें स्क्रिप्ट का उपयोग करके हटा दें या संपादक को कॉन्फ़िगर करें ताकि यह जोड़ा न जाए।

से UTF-8 से बीओएम निकाला जा रहा है :

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

मुझे यकीन है कि यह आसानी से PHP में अनुवाद करता है।


6
ध्यान दें कि BOM वर्णों का अनुक्रम नहीं है, यह एक एकल वर्ण है। यदि फ़ाइल UTF-8 में है, तो चरित्र को तीन बाइट्स में दर्शाया गया है । यदि फ़ाइल UTF-8 में है, तो इसे दूसरे एन्कोडिंग में देखें (यानी, जिसमें EF BB BF दिखाई देता है जहां BOM होना चाहिए) एक त्रुटि है। UTF-8 फ़ाइल से BOM को निकालने के लिए, किसी को (एकल) charcter U + FEFF को निकालना चाहिए। हाँ, पैदल!
जेफरी एल व्हाइटलेज

1
मुझे PHP में काम करने का मौका नहीं मिला (यह सिर्फ मेरी अक्षमता है, आपकी नहीं: P), इसलिए मैंने यह देखने के लिए एक जांच की कि क्या BOM है और पहले 3 अक्षर हटा दें। यहाँ कोड है, अगर किसी को इसकी आवश्यकता है: यदि (पदार्थ ($ css, 0,3) == पैक ("CCC", 0xef, 0xbb, 0xbf)) {$ css = पदार्थ ($ css, 3); }
मैट

7
यह php के रूप में अनुवाद करता है $string = preg_replace('/\x{EF}\x{BB}\x{BF}/','',$string);। इससे पहले कि आप इसका उपयोग करें, यदि आप इसके बजाय स्रोत पर समस्या को ठीक नहीं कर सकते हैं।
15

6

मेरे लिए, यह काम किया:

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

यदि मैं इस मेटा को हटाता हूं, तो ¿»। फिर से प्रकट होता है। आशा है कि यह किसी की मदद करता है ...


5

मुझे PHP का पता नहीं है, इसलिए मुझे नहीं पता कि क्या यह संभव है, लेकिन सबसे अच्छा उपाय यह होगा कि आप फ़ाइल को कुछ अन्य एन्कोडिंग के बजाय UTF-8 के रूप में पढ़ें। BOM वास्तव में एक शून्य WIDTH NO BREAK SPACE है। यह व्हॉट्सएप है, इसलिए यदि फाइल को सही एन्कोडिंग (UTF-8) में पढ़ा जा रहा था, तो BOM को व्हॉट्सएप के रूप में व्याख्या किया जाएगा और इसे सीएसएस फ़ाइल के परिणामस्वरूप अनदेखा किया जाएगा।

इसके अलावा, फ़ाइल को सही एन्कोडिंग में पढ़ने का एक और फायदा यह है कि आपको वर्णों के गलत होने के बारे में चिंता करने की ज़रूरत नहीं है। आपका संपादक आपको बता रहा है कि आप जिस कोड पृष्ठ को सहेजना चाहते हैं, वह उन सभी पात्रों को नहीं करेगा जिनकी आपको आवश्यकता है। यदि 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 सेट फाइलकेनोडिंग = utf-8 | एन्कोडिंग = utf-8 | सेट नोबॉम्ब | wq '


grep -rlI $'\xEF\xBB\xBF' .बाइनरी फ़ाइलों को अनदेखा करने के लिए उपयोग करें । और यहां भी .बेहतर *है।
नबी काज

2

मुझे अपनी कुछ PHP फाइलों (¿»same ¿» ¿) में दिखाई देने वाले BOM के साथ भी यही समस्या थी।

यदि आप PhpStorm का उपयोग करते हैं, तो आप इसे सेटिंग्स में हटाने के लिए हॉटकी पर सेट कर सकते हैं -> IDE सेटिंग्स -> कीमैप -> मुख्य मेनू -> फ़ाइल -> निकालें BOM।


2

नोटपैड ++ में, "एन्कोडिंग" मेनू चुनें, फिर "बिना बॉम के UTF-8 में एनकोड करें"। फिर सेव करें।

स्टैक ओवरफ्लो प्रश्न देखें बिना बीओएम के UTF-8 में पाठ को बचाने के लिए नोटपैड कैसे बनाएं?


2

नोटपैड ++ में, सवाल के तहत PHP फ़ाइल खोलें।

शीर्ष पर एन्कोडिंग पर क्लिक करें और "यूटीएफ -8 में एनकोडिंग बीओएम के बिना एनकोडिंग" से केवल "यूटीएफ -8 में एन्कोडिंग" पर बदलें। फ़ाइल को अपने सर्वर पर सहेजें और अधिलेखित करें।


1

एक ही समस्या, अलग समाधान।

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

1

यदि आपको UTF-8 एन्कोडेड फ़ाइलों से BOM को निकालने में सक्षम होने की आवश्यकता है, तो आपको सबसे पहले एक संपादक की पकड़ बनानी होगी जो उनके बारे में जानते हों।

मैं व्यक्तिगत रूप से ई पाठ संपादक का उपयोग करता हूं ।

नीचे दाईं ओर, BOM टैग सहित वर्ण एन्कोडिंग के विकल्प हैं। अपनी फ़ाइल को लोड करें, बाइट ऑर्डर मार्कर को अचयनित करें यदि यह चुना गया है, फिर से बेचना, और यह किया जाना चाहिए।

Alt पाठ http://oth4.com/encoding.png

ई मुक्त नहीं है, लेकिन एक नि: शुल्क परीक्षण है, और यह एक उत्कृष्ट संपादक (सीमित TextMate संगतता) है।


1
छवि लिंक टूट गया है।
पीटर मोर्टेंसन

1

आप इसे PhpStorm द्वारा खोल सकते हैं और अपनी फ़ाइल पर राइट-क्लिक करें और Remove BOM ... पर क्लिक करें ।


1

BOM के साथ समस्या के लिए एक और अच्छा समाधान यहां दिया गया है। ये दो VBScript (.vbs) स्क्रिप्ट हैं।

एक फ़ाइल में BOM खोजने के लिए और एक फ़ाइल में शापित BOM के लिए। यह बहुत अच्छा काम करता है और उपयोग करने में आसान है।

बस एक .vbs फ़ाइल बनाएं, और उसमें निम्न कोड पेस्ट करें।

आप केवल .vbs फ़ाइल पर संदिग्ध फ़ाइल को खींचकर और छोड़ कर VBScript स्क्रिप्ट का उपयोग कर सकते हैं। यह आपको बताएगा कि कोई बीओएम है या नहीं।

' 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 से है


1

PHPStorm में, कई फाइलों के लिए और BOM जरूरी नहीं कि फाइल की शुरुआत में, आप \x{FEFF}(नियमित अभिव्यक्ति) खोज सकते हैं और कुछ भी नहीं बदल सकते हैं।


0

एक ही समस्या है, लेकिन यह केवल एक फ़ाइल को प्रभावित करता है इसलिए मैंने केवल एक रिक्त फ़ाइल बनाई, मूल फ़ाइल से कोड को नई फ़ाइल में कॉपी / पेस्ट किया और फिर मूल फ़ाइल को बदल दिया। फैंसी नहीं है लेकिन यह काम किया।


0

सभी BOMed फ़ाइलों की खोज करने के लिए कुल कमांडर का उपयोग करें :

BOM के साथ UTF-8 फ़ाइलों की खोज करने का सुरुचिपूर्ण तरीका?

  • इन फाइलों को कुछ उचित संपादक (जो BOM को पहचानता है) को ग्रहण की तरह खोलें ।

  • फ़ाइल के एन्कोडिंग को आईएसओ में बदलें (राइट क्लिक, गुण)।

  • फ़ाइल की शुरुआत से Cut »¿काटें, सहेजें

  • फ़ाइल की एन्कोडिंग को वापस UTF-8 में बदलें

... और n का उपयोग करने के बारे में सोचना भी नहीं चाहिए ... d फिर से!


0

मुझे भी यही समस्या थी। समस्या इसलिए थी क्योंकि मेरी एक php फाइल utf-8 में थी (सबसे महत्वपूर्ण, विन्यास फाइल जो सभी php फाइलों में शामिल है)।

मेरे मामले में, मेरे पास 2 अलग-अलग समाधान थे जो मेरे लिए काम करते थे:

सबसे पहले, मैंने अपाचे कॉन्फ़िगरेशन को कॉन्फ़िगरेशन फ़ाइलों (या .htaccess) में AddDefaultCharsetDirective का उपयोग करके बदल दिया। यह समाधान अपाचे को सही एनकोड का उपयोग करने के लिए मजबूर करता है।

AddDefaultCharset ISO-8859-1

दूसरा उपाय php फ़ाइल की खराब एन्कोडिंग को बदलना था।


0
  1. अपने फ़ाइल नाम के पाठ की प्रतिलिपि बनाएँ। फाइल।
  2. अपनी css फ़ाइल बंद करें।
  3. एक फ़ाइल नाम से बचने के लिए इसे filename2.css का नाम बदलें।
  4. एमएस नोटपैड या वर्डपैड में, एक नई फ़ाइल बनाएं।
  5. इसमें टेक्स्ट पेस्ट करें।
  6. फ़ाइल नाम के रूप में सहेजें। एन्कोडिंग विकल्पों में से UTF-8 का चयन करना।
  7. Filename.css अपलोड करें।

-3

अपनी जांच करें index.php, "... charset=iso-8859-1" ढूंढें और इसे "... charset=utf-8" से बदलें ।

शायद यह काम करेगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.