Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Разное

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Как избавиться от служебных знаков, присущих кодировке utf8 ?
 
 автор: Владимир55   (01.04.2010 в 15:00)   письмо автору
 
 

Считывая информацию из файла посредством функции 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);


Теперь опасаюсь, не повредился ли при этом случайно сам текст? Вель эти коды имеют кириллический эквовалент...

  Ответить  
 
 автор: Саня   (01.04.2010 в 15:19)   письмо автору
 
   для: Владимир55   (01.04.2010 в 15:00)
 

file_get_contents() позволяет считывать файл, предварительно пропустив несколько байт:

<?
$spisok 
file_get_contents($adr_dir $filenullnull3);
В этом примере пропускаются первые три байта — этот пресловутый BOM.

  Ответить  
 
 автор: Владимир55   (01.04.2010 в 16:06)   письмо автору
 
   для: Саня   (01.04.2010 в 15:19)
 

Да, так было бы лучше. Нюанс в том, что я уже объединил вместе информацию из нескольких файлов, так что ВОМ оказался и в середине...

Кроме того, не всегда в начале файла есть ВОМ (по крайней мере, у меня не во всех файлах, полученных из разных источников).

  Ответить  
 
 автор: Саня   (01.04.2010 в 16:13)   письмо автору
 
   для: Владимир55   (01.04.2010 в 16:06)
 

Если у вас остались исходники, то можно переклеить их заново.
Удалить BOM можно таким образом:
<?
preg_replace
('!^\xEF\xBB\xBF!'''$content);
Соовтетственно, если в начале файла не окажется BOM, то ничего не произойдёт.

  Ответить  
 
 автор: Владимир55   (01.04.2010 в 17:00)   письмо автору
 
   для: Саня   (01.04.2010 в 16:13)
 

Спасибо, с этом теперь ясно!

А можно ли WinHex настроить так,чтобы он показывал десятичные коды знаков?

  Ответить  
 
 автор: Саня   (01.04.2010 в 17:56)   письмо автору
 
   для: Владимир55   (01.04.2010 в 17:00)
 

Не знаю. Я такой программой не пользовался.

  Ответить  
 
 автор: Тень*   (01.04.2010 в 15:36)
 
   для: Владимир55   (01.04.2010 в 15:00)
 

> Вель эти коды имеют кириллический эквовалент...
Например?

  Ответить  
 
 автор: Владимир55   (01.04.2010 в 16:08)   письмо автору
 
   для: Тень*   (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" не может по определению (см. википедию) быть частью другого символа.

  Ответить  
 
 автор: Владимир55   (01.04.2010 в 22:26)   письмо автору
 
   для: Тень*   (01.04.2010 в 22:11)
 

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

А в кодировке 1251 это как раз код буквы "п".

Но вцелом все оказалось нормально - грамматическая проверка не выявила ошибок в обработанном тексте.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования