|
|
|
| Считывая информацию из файла посредством функции file_get_contents, я получил и три служебных знака, соответствующих кодировке file_get_contents. Посмотрев текстовый файл редактором WinHex, я обнаружил в начале файла такие три кода: EF BB BF
Для избавления от этих кодов сделано так:
<?php
$spisok = file_get_contents($adr_dir . $file);
$spisok = str_replace(chr(239).chr(187).chr(191),"",$spisok);
|
Теперь опасаюсь, не повредился ли при этом случайно сам текст? Вель эти коды имеют кириллический эквовалент... | |
|
|
|
|
|
|
|
для: Владимир55
(01.04.2010 в 15:00)
| | file_get_contents() позволяет считывать файл, предварительно пропустив несколько байт:
<?
$spisok = file_get_contents($adr_dir . $file, null, null, 3);
| В этом примере пропускаются первые три байта — этот пресловутый BOM. | |
|
|
|
|
|
|
|
для: Саня
(01.04.2010 в 15:19)
| | Да, так было бы лучше. Нюанс в том, что я уже объединил вместе информацию из нескольких файлов, так что ВОМ оказался и в середине...
Кроме того, не всегда в начале файла есть ВОМ (по крайней мере, у меня не во всех файлах, полученных из разных источников). | |
|
|
|
|
|
|
|
для: Владимир55
(01.04.2010 в 16:06)
| | Если у вас остались исходники, то можно переклеить их заново.
Удалить BOM можно таким образом:
<?
preg_replace('!^\xEF\xBB\xBF!', '', $content);
| Соовтетственно, если в начале файла не окажется BOM, то ничего не произойдёт. | |
|
|
|
|
|
|
|
для: Саня
(01.04.2010 в 16:13)
| | Спасибо, с этом теперь ясно!
А можно ли WinHex настроить так,чтобы он показывал десятичные коды знаков? | |
|
|
|
|
|
|
|
для: Владимир55
(01.04.2010 в 17:00)
| | Не знаю. Я такой программой не пользовался. | |
|
|
|
|
автор: Тень* (01.04.2010 в 15:36) |
|
|
для: Владимир55
(01.04.2010 в 15:00)
| | > Вель эти коды имеют кириллический эквовалент...
Например? | |
|
|
|
|
|
|
|
для: Тень*
(01.04.2010 в 15:36)
| | Код (239) - буква п | |
|
|
|
|
автор: Тень* (01.04.2010 в 22:11) |
|
|
для: Владимир55
(01.04.2010 в 16:08)
| | Нет, код буквы "п" в UTF-8 совсем другой.
Короче говоря, твой код с str_replace(bom, '', ...) не может испортить текст, т.к. последовательность "11101111 10111011 10111111" не может по определению (см. википедию) быть частью другого символа. | |
|
|
|
|
|
|
|
для: Тень*
(01.04.2010 в 22:11)
| | У меня получается так, что скрипт работает в 1251, но среди обрабатываемых текстовых файлов оказалось несколько в кодировке UTF-8, отсюда и сложности.
А в кодировке 1251 это как раз код буквы "п".
Но вцелом все оказалось нормально - грамматическая проверка не выявила ошибок в обработанном тексте. | |
|
|
|