Подтвердить что ты не робот

Как удалить ï "¿с начала файла?

У меня есть файл CSS, который отлично выглядит, когда я его открываю, используя gedit, но когда он читает PHP (чтобы объединить все CSS файлы в один), этот CSS имеет следующие символы, добавленные к нему: ï "¿

PHP удаляет все пробелы, поэтому случайный ï "¿в середине кода испортит все. Как я уже упоминал, я не могу видеть эти символы, когда открываю файл в gedit, поэтому я не могу удалить их очень легко.

Я столкнулся с проблемой, и в кодировке файлов явно что-то не так, что имеет смысл, так как я переносил файлы на разные Linux/Windows-серверы через ftp и rsync, с рядом текстовых редакторов. Я не очень много знаю о кодировке символов, поэтому помощь будет оценена.

Если это помогает, файл сохраняется в формате UTF-8, и gedit не позволит мне сохранить его в формате ISO-8859-15 (документ содержит один или несколько символов, которые не могут быть закодированы с использованием указанного символа кодирование). Я попытался сохранить его с окончанием строки Windows и Linux, но ни один из них не помог.

4b9b3361

Ответ 1

Три слова для вас:

Оценка порядка байтов (BOM)

Это представление для спецификации UTF-8 в ISO-8859-1. Вы должны сообщить своему редактору не использовать спецификации или использовать другой редактор, чтобы вырезать их.

Чтобы автоматизировать удаление спецификации, вы можете использовать awk, как показано в этом вопросе.

Как другой ответ говорит, лучше всего, чтобы PHP действительно интерпретировал спецификацию правильно, для этого вы можете использовать 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...
  ?>

Ответ 2

В PHP вы можете сделать следующее, чтобы удалить все несимволы, включая соответствующий символ.

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

Ответ 3

Для тех, у кого есть доступ к оболочке, есть небольшая команда, чтобы найти все файлы с BOM, заданными в каталоге public_html, - обязательно измените его на то, что ваш правильный путь на вашем сервере

Код:

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

и если вам нравится редактор vi, откройте файл в vi:

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

И введите команду для удаления спецификации:

set nobomb

Сохраните файл:

wq

Ответ 4

Откройте файл Notepad ++. В меню Кодирование выберите Преобразовать в UTF-8 без спецификации, сохраните файл, замените старый файл на этот новый файл. И это будет работать, черт возьми.

Ответ 5

BOM - это просто последовательность символов ($ EF $BB $BF для UTF-8), поэтому просто удалите их с помощью сценариев или настройте редактор так, чтобы он не был добавлен.

Из Удаление спецификации из UTF-8:

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

Я уверен, что это легко переводит на PHP.

Ответ 6

Для меня это сработало:

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

Если я удалю эту мета, снова появится символ ï "¿. Надеюсь, это поможет кому-то...

Ответ 7

Я не знаю PHP, поэтому я не знаю, возможно ли это, но лучшим решением было бы прочитать файл как UTF-8, а не какую-либо другую кодировку. Спецификация на самом деле представляет собой ZERO WIDTH NO BREAK SPACE. Это пробел, поэтому, если файл читается в правильной кодировке (UTF-8), тогда спецификация будет интерпретирована как пробел, и она будет проигнорирована в результирующем файле CSS.

Кроме того, еще одно преимущество чтения файла в правильной кодировке состоит в том, что вам не нужно беспокоиться о том, что символы неправильно интерпретируются. Ваш редактор сообщает вам, что кодовая страница, которую вы хотите сохранить, не будет выполнять все необходимые вам символы. Если PHP затем читает файл в некорректной кодировке, то очень вероятно, что другие символы, кроме спецификации, интерпретируются молча. Используйте UTF-8 везде, и эти проблемы исчезают.

Ответ 8

Вы можете использовать

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

Замена awk, похоже, сработала, но она не на месте.

Ответ 9

У меня была та же проблема с спецификацией, которая появилась в некоторых моих файлах PHP (ï "¿ï" ¿).

Если вы используете PhpStorm, вы можете установить горячую клавишу, чтобы удалить ее в настройках → Настройки IDE → Ключ клавиатуры → Главное меню → Файл → Удалить спецификацию.

Ответ 10

grep -rl $'\ xEF\xBB\xBF' * | xargs vim -e -c 'argdo set fileencoding = utf-8 | set encoding = utf-8 | набор знатных | WQ '

Ответ 12

Откройте файл PHP под вопросом, в Notepad ++.

Нажмите "Кодирование вверху" и измените "Кодирование в UTF-8 без спецификации" на "Кодирование в UTF-8". Сохраните и перезапишите файл на своем сервере.

Ответ 13

Если вам нужно удалить спецификацию из кодированных файлов UTF-8, вам сначала нужно получить редактор, который их знает.

Я лично использую E Text Editor.

В правом нижнем углу есть опции для кодировки символов, включая тег спецификации. Загрузите файл, снимите флажок "Байт-маркер заказа", если он выбран, сохраните его, и он должен быть выполнен.

Alt текст http://oth4.com/encoding.png

E не является бесплатным, но есть бесплатная пробная версия, и это отличный редактор (ограниченная TextMate совместимость).

Ответ 14

Такая же проблема, другое решение.

Одна строка в файле 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\"?" . ">";

Ответ 15

Вот еще одно хорошее решение проблемы с спецификацией. Это два сценария VBScript (.vbs).

Один для поиска спецификации в файле и один для уничтожения проклятой спецификации в файле. Он работает очень хорошо и прост в использовании.

Просто создайте файл .vbs и вставьте в него следующий код.

Вы можете использовать VBScript script, просто перетащив подозрительный файл в файл .vbs. Он скажет вам, есть ли спецификация или нет.

' 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

Если он сообщает вам, что существует спецификация, перейдите и создайте второй файл .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.

Ответ 16

Используйте Total Commander для поиска всех BOMed файлов:

Элегантный способ поиска файлов UTF-8 с спецификацией?

  • Откройте эти файлы в каком-то правильном редакторе (который распознает спецификацию), например Eclipse.

  • Измените кодировку файла на ISO (щелкните правой кнопкой мыши, свойства).

  • Вырезать ï "¿из начала файла, сохранить

  • Измените кодировку файла на UTF-8

... и даже не думайте об использовании n... d снова!

Ответ 17

Вы можете открыть его PhpStorm и щелкнуть правой кнопкой мыши по файлу и нажать "Удалить спецификацию..."

Ответ 18

Такая же проблема, но она затрагивает только один файл, поэтому я просто создал пустой файл, скопировал/вставлял код из исходного файла в новый файл, а затем заменил исходный файл. Не нравится, но это сработало.

Ответ 19

У меня была та же проблема. Проблема заключалась в том, что один из моих php файлов был в utf-8 (самый важный, файл конфигурации, который включен во все файлы php).

В моем случае у меня было 2 разных решения, которые работали для меня:

Сначала я изменил конфигурацию Apache, используя AddDefaultCharsetDirective в файлах конфигурации (или в .htaccess). Это решение заставляет Apache использовать правильную кодировку.

AddDefaultCharset ISO-8859-1

Второе решение заключалось в изменении плохой кодировки файла php.

Ответ 20

  • Скопируйте текст файла filename.css.
  • Закройте файл css.
  • Переименуйте файл filename2.css, чтобы избежать столкновения с именем файла.
  • В MS Notepad или Wordpad создайте новый файл.
  • Вставьте в него текст.
  • Сохраните его как filename.css, выбрав UTF-8 из параметров кодирования.
  • Загрузить имя_файла .css.

Ответ 21

В PHPStorm для нескольких файлов и спецификации необязательно в начале файла вы можете искать \x{FEFF} (регулярное выражение) и ничего не заменять.

Ответ 22

Проверьте на index.php, найдите "... charset=iso-8859-1" и замените его на "... charset=utf-8".

Возможно, это сработает.