Как удалить слово " ï " из начала файла?
У меня есть CSS-файл, который выглядит нормально, когда я открываю его с помощью gedit, но когда он читается PHP (чтобы объединить все файлы CSS в один), этот CSS имеет следующие символы, добавленные к нему: ï"
PHP удаляет все пробелы,поэтому случайное " ï " в середине кода портит все это. Как я уже упоминал, я не могу видеть эти символы, когда я открываю файл в gedit, поэтому я не могу удалить их очень легко.
я погуглил проблему, и очевидно, что-то не так с кодировкой файлов, что имеет смысл, поскольку я переношу файлы на разные серверы Linux/Windows через ftp и rsync, С рядом текстовых редакторов. Я действительно не знаю много о кодировке символов, хотя, так что помощь будет оценена.
Если это поможет, файл сохраняется в формате UTF-8, и gedit не позволит мне сохранить его в формате ISO-8859-15 (документ содержит один или несколько символов, которые не могут быть кодируется с использованием указанной кодировки символов). Я попытался сохранить его с окончаниями строк Windows и Linux, но ни один не помог.
22 ответа:
три слова для вас:
это представление для спецификации 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... ?>
In PHP, вы можете сделать следующее, Чтобы удалить все символы, включая символ в вопрос.
$response = preg_replace('/[\x00-\x1F\x80-\xFF]/', '', $response);
для тех, у кого есть доступ к оболочке вот небольшая команда, чтобы найти все файлы с набором спецификаций в каталоге public_html - обязательно измените его на то, что ваш правильный путь на вашем сервере
код:
grep -rl $'\xEF\xBB\xBF' /home/username/public_html
и если вам комфортно с vi редактор, откройте файл в VI:
vi /path-to-file-name/file.php
и введите команду для удаления спецификации:
set nobomb
сохраните файл:
wq
откройте файл в Блокнот++. Из кодирование выберите конвертировать в UTF-8 без BOM, сохраните файл, замените старый файл на этот новый файл. И это сработает, черт возьми.
BOM-это просто последовательность символов ($EF $BB $BF для UTF-8), поэтому просто удалите их с помощью скриптов или настройте редактор, чтобы он не добавлялся.
С удаление спецификации из UTF-8:
#!/usr/bin/perl @file=<>; $file[0] =~ s/^\xEF\xBB\xBF//; print(@file);
Я уверен, что он легко переводится на PHP.
для меня это работает:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
если я удалю эту мету, то снова появится" ï". Надеюсь, это кому-то поможет...
Я не знаю PHP, поэтому я не знаю, возможно ли это, но лучшим решением было бы прочитать файл как UTF-8, а не какую-то другую кодировку. Спецификация на самом деле является нулевой шириной без разрыва пространства. Это пробелы, поэтому, если файл считывается в правильной кодировке (UTF-8), то спецификация будет интерпретироваться как пробелы, и она будет проигнорирована в результирующем файле CSS.
кроме того, еще одно преимущество чтения файла в правильной кодировке заключается в том, что вам не придется беспокоиться о том, что персонажи будут неверно истолкованы. Ваш редактор говорит вам, что кодовая страница, которую вы хотите сохранить, не будет делать все символы, которые вам нужны. Если PHP затем читает файл в неправильной кодировке, то очень вероятно, что другие символы, кроме спецификации, молча неверно интерпретируются. Использовать UTF-8 везде, и эти проблемы исчезают.
можно использовать
vim -e -c 'argdo set fileencoding=utf-8|set encoding=utf-8| set nobomb| wq'
замена с awk, кажется, работает, но не на месте.
греп -РЛ $'\также xef\xBB по\ИЦ' * | команды xargs ВИМ -е-с 'argdo установить атрибуты fileencoding=UTF-8 не|установить кодировка=кодировка UTF-8| комплект nobomb| ВК'
У меня была такая же проблема с BOM, появляющимся в некоторых моих PHP-файлах (ï"ï" ¿).
Если вы используете PhpStorm вы можете установить на горячую клавишу, чтобы удалить его в настройках -> настройки IDE -> Keymap -> главное меню - > Файл -> удалить спецификацию.
в Notepad++ выберите меню "кодировка", затем"кодировать в UTF-8 без спецификации". После этого сохранить.
см. вопрос переполнения стека как сделать блокнот для сохранения текста в UTF-8 без спецификации?.
откройте PHP-файл, о котором идет речь, в Notepad++.
нажмите на кодировку вверху и перейдите от "кодировка в UTF-8 без спецификации" к просто "кодировка в UTF-8". Сохраните и перезапишите файл на вашем сервере.
та же проблема, другое решение.
одна строка в PHP-файле печатала заголовки XML (которые используют те же теги begin/end, что и PHP). Похоже, что код внутри этих тегов установил кодировку и был выполнен в PHP, что привело к появлению странных символов. В любом случае вот решение:
# Original $xml_string = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"; # fixed $xml_string = "<" . "?xml version=\"1.0\" encoding=\"UTF-8\"?" . ">";
Если вам нужно удалить спецификацию из закодированных файлов UTF-8, вам сначала нужно получить редактор, который знает о них.
Я лично использую E Текстовый Редактор.
в правом нижнем углу есть параметры кодировки символов, включая тег спецификации. Загрузите файл, снимите флажок маркер порядка байтов, если он выбран, повторно сохраните, и это должно быть сделано.
Alt текст http://oth4.com/encoding.png
E не является бесплатно, но есть бесплатная пробная версия, и это отличный редактор (общества TextMate совместимость).
вот еще одно хорошее решение проблемы с BOM. Это два VBScript (.ВБС) скрипты.
один для поиска спецификации в файле и один для убийства проклятой спецификации в файле. Он работает довольно хорошо и прост в использовании.
просто создать .файл vbs и вставьте в него следующий код.
вы можете использовать сценарий VBScript, просто перетащив подозрительный файл на экран .файл 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
если он говорит вам, что есть 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
код из Хайко Jendreck.
та же проблема, но она затронула только один файл, поэтому я просто создал пустой файл, скопировал/вставил код из исходного файла в новый файл, а затем заменил исходный файл. Не фантазии, но это сработало.
использовать Total Commander для поиска всех файлов BOMed:
элегантный способ поиска файлов UTF-8 с помощью BOM?
откройте эти файлы в каком-нибудь правильном редакторе (который распознает BOM), например затмение.
измените кодировку файла на ISO (щелкните правой кнопкой мыши, Свойства).
вырезать ï"¿ с начала файла, сохранить
измените кодировку файла обратно на UTF-8
...и даже не думайте об использовании Н...d снова!
вы можете открыть его с помощью PhpStorm и щелкните правой кнопкой мыши на файл и нажмите на кнопку удалить BOM...
У меня была та же проблема. Проблема заключалась в том, что один из моих php-файлов был в utf-8 (самый важный, файл конфигурации, который включен во все php-файлы).
в моем случае, у меня было 2 разных решения, которые работали для меня :
во-первых, я изменил конфигурацию Apache с помощью AddDefaultCharsetDirective в файлах конфигурации (или in .htaccess). Это решение заставляет Apache использовать правильную кодировку.
AddDefaultCharset ISO-8859-1
второе решение было чтобы изменить плохую кодировку файла php.
- скопируйте текст вашего имени файла.файл CSS.
- закройте файл css.
- переименовать его filename2.css, чтобы избежать столкновения файлов.
- в MS Notepad или Wordpad создайте новый файл.
- вставьте в него текст.
- Сохранить как filename.css, выбрав UTF-8 из параметров кодирования.
- загрузить имя файла.стиль CSS.