EOMY.NET
Хостинг EOMY.NET: Форум поддержки
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 
RSS Feed  

Работа с кодировкой. str_replace

 
Начать новую тему   Ответить на тему    Список форумов EOMY.NET -> Программирование для WEB
Работа с кодировкой. str_replace
Автор Сообщение
lazutov
while (1==1);
Последний герой


Зарегистрирован: 30.04.2007
Сообщения: 3840

111220 Монеты

СообщениеДобавлено: Сб, 11 Окт, 2008 18:35    Заголовок сообщения: Работа с кодировкой. str_replace Ответить с цитатой

Есть текст в кодировке сp1251
Надо заменить все двойные переводы строк на одинарные и отдать как файл txt.
Приведённые ниже варианты не дают результата.
Код:

$res=str_replace(chr(13),'',$res);
$res=str_replace(chr(10).chr(10),chr(10),$res);
//----

$nl='
';
$res=str_replace($nl.$nl,$nl,$res);   
//---

$res=str_replace("\n\n","\n",$res);   
//---
$res=nl2br($res);
$res=str_replace("<br><br>","<br>",$res);   
$res=str_replace("<br>",chr(10),$res);   


Файл для эксперимента
http://slil.ru/26227553

Заранее спасибо.
Нашедшего ждет премия - полкило монет.
_________________
сервис DNS | разные http, DNS и прочие утилиты
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
madhamster
Согнул ложку
Согнул ложку


Зарегистрирован: 09.10.2006
Сообщения: 902

432 Монеты

СообщениеДобавлено: Сб, 11 Окт, 2008 20:47    Заголовок сообщения: Ответить с цитатой

Попробуй регуляркой заменить. У меня была подобная проблема однако один из твоих вариантов исправлял ситуацию...
_________________
NextStage - live music competition
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
eomysupport
Администратор
Администратор


Зарегистрирован: 25.12.2005
Сообщения: 5087

66545 Монеты

СообщениеДобавлено: Вс, 12 Окт, 2008 01:53    Заголовок сообщения: Ответить с цитатой

Из файла-примера видно, что нужно писать примерно так:
Код:
$res=str_replace("\r\n\r\n","\r\n",$res);   


Или так:
Код:
$res=str_replace("\r","",$res);
$res=str_replace("\n\n","\n",$res);   

_________________
Дмитрий

Техническая поддержка бесплатного хостинга осуществляется только через форум поддержки
Часто задаваемые вопросы по хостингу
Условия предоставления услуг бесплатного хостинга
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
lazutov
while (1==1);
Последний герой


Зарегистрирован: 30.04.2007
Сообщения: 3840

111220 Монеты

СообщениеДобавлено: Вс, 12 Окт, 2008 07:25    Заголовок сообщения: Ответить с цитатой

eomysupport
\r все удалены давным давно.(chr(13))
Ваш вариант тоже не помог(ни один).
А можно поподробнее про регексп?
_________________
сервис DNS | разные http, DNS и прочие утилиты
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
AlfaUngzipper
Два пингвина
Два пингвина


Зарегистрирован: 23.02.2007
Сообщения: 370
Откуда: Halle (Saale)
4 Монеты

СообщениеДобавлено: Вс, 12 Окт, 2008 09:48    Заголовок сообщения: Ответить с цитатой

//Обработка строки сообщения
$usemessage = htmlspecialchars(stripslashes($usemessage));

$usemessage = preg_replace("/[\x0A-\x0D]/","ћ",$usemessage);
$usemessage = preg_replace("/(ћ){4,}+/","<br><br> ",$usemessage);
$usemessage = preg_replace("/(ћ){2,3}/","<br> ",$usemessage);

Поблема исследована и написан код был на этапе изучения мной пхп в 2004 году. Попробуйте код применить к флуду "энтерами", попробуйте обработать стихотворение и стихотворение с флудом. Very Happy

З.Ы.: Естественно <br> поменяйте на \r\n
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Веденин
Красные глаза
Красные глаза


Зарегистрирован: 17.05.2007
Сообщения: 2066
Откуда: Самара
11733 Монеты

СообщениеДобавлено: Вс, 12 Окт, 2008 10:54    Заголовок сообщения: Ответить с цитатой

Написал скрипт
Код:

<?php
$text = file_get_contents('D:\!work\ch\ch.txt'); 
$text = str_replace("\r","",$text);
$text = str_replace("\n\n","\n",$text);
echo $text;
?>


Прогнал на локальном компе, получил результат
Код:

   Татьяна Полякова
   Держи меня крепче
   Я знал одну женщину,
   Она всегда выходила в окно.
   В ее доме было десять тысяч дверей,
   Но она всегда выходила в окно.
   Она разбивалась насмерть,
   Но ей было все равно.
<Тутанхамон>, <Наутилус>

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

P.S. Если у вас не получится дайте прямой линк на тестовый txt файл

P.P.S. Важно \r надо менять не на пробел, а на нулевой символ.
_________________
Написание конвекторов, парсеров, интеграции нескольких сайтов (в личку)

Тематические поисковые системы Рунета: Танцевальная, программиста, поиск книг
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
lazutov
while (1==1);
Последний герой


Зарегистрирован: 30.04.2007
Сообщения: 3840

111220 Монеты

СообщениеДобавлено: Вс, 12 Окт, 2008 11:31    Заголовок сообщения: Ответить с цитатой

попробуйте не echo, в сохранить в текстовый файл.

Тестовый файл: unpop.ru/books/L.test.zip

PS \r и так меняется на нулевой
_________________
сервис DNS | разные http, DNS и прочие утилиты
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
eomysupport
Администратор
Администратор


Зарегистрирован: 25.12.2005
Сообщения: 5087

66545 Монеты

СообщениеДобавлено: Вс, 12 Окт, 2008 11:40    Заголовок сообщения: Ответить с цитатой

А как у вас происходит запись в файл? (подозреваю, что проблема там)
_________________
Дмитрий

Техническая поддержка бесплатного хостинга осуществляется только через форум поддержки
Часто задаваемые вопросы по хостингу
Условия предоставления услуг бесплатного хостинга
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Веденин
Красные глаза
Красные глаза


Зарегистрирован: 17.05.2007
Сообщения: 2066
Откуда: Самара
11733 Монеты

СообщениеДобавлено: Вс, 12 Окт, 2008 11:42    Заголовок сообщения: Ответить с цитатой

У меня и так была переадресация в текстовый файл средствами dos, ну вот скрипт:

Код:
<?php
$text = file_get_contents('D:\!work\L.test\L.33210.txt'); 
$text = str_replace("\r","",$text);
$text = str_replace("\n\n","\n",$text);

$fp = fopen ('l.txt','w');
fwrite($fp,$text);
?>


Вот результат
Код:
Текст получен через систему UnPoP.ru
Источник: http://www.litportal.ru/genre17/author86/read/page/1/book33210.html
   Татьяна Полякова
   Держи меня крепче
   Я знал одну женщину,
   Она всегда выходила в окно.
   В ее доме было десять тысяч дверей,
   Но она всегда выходила в окно.
   Она разбивалась насмерть,
   Но ей было все равно.
<Тутанхамон>, <Наутилус>
   Однажды он мне его показал. В тот день я болталась по торговому центру, выбирала Ритке подарок. Направилась к эскалатору на втором этаже, откуда-то вывернул парень в темной куртке, в надвинутой на глаза бейсболке, задел меня плечом, буркнул <извините> и пошел дальше. И я, кивнув в ответ, мол, нет проблем, задел и задел, со всяким бывает, вдруг ощутила толчок, но в сердце, и замерла, глядя ему вслед и чувствуя, как все внутри холодеет и сворачивается в тугой клубок.
   Парень успел удалиться на десяток метров, обернулся под моим растерянным взглядом, лихо улыбнулся и помахал рукой.


P.S.
Положил этот скрипт на сервер,запустил вот исходник
http://vedenin.ru/data/L.txt

вот результат
http://vedenin.ru/data/r.txt
_________________
Написание конвекторов, парсеров, интеграции нескольких сайтов (в личку)

Тематические поисковые системы Рунета: Танцевальная, программиста, поиск книг
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Веденин
Красные глаза
Красные глаза


Зарегистрирован: 17.05.2007
Сообщения: 2066
Откуда: Самара
11733 Монеты

СообщениеДобавлено: Вс, 12 Окт, 2008 11:52    Заголовок сообщения: Ответить с цитатой

eomysupport писал(а):
А как у вас происходит запись в файл? (подозреваю, что проблема там)

А может проблема в чтение данных? Вы берете текстовый файл с сервера или текст передается методом get? Может у вас на сервере какая то экзотическая кодировка

P.S. Попробуйте скопировать мой скрипт как есть, если он не будет работать это будет странно.
Копируйте этот код на сервер и запишите в L.txt исходный файл, а результат появится в r.txt:
Код:
<?php
$text = file_get_contents('L.txt'); 
$text = str_replace("\r","",$text);
$text = str_replace("\n\n","\n",$text);

$fp = fopen ('r.txt','w');
fwrite($fp,$text);
?>

_________________
Написание конвекторов, парсеров, интеграции нескольких сайтов (в личку)

Тематические поисковые системы Рунета: Танцевальная, программиста, поиск книг
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
lazutov
while (1==1);
Последний герой


Зарегистрирован: 30.04.2007
Сообщения: 3840

111220 Монеты

СообщениеДобавлено: Вс, 12 Окт, 2008 12:51    Заголовок сообщения: Ответить с цитатой

текст берется с litportal.ru в cp-1251
код не работает.
eomysupport
запись присходит. стринг пишется в файл, добавляется в архив zip, файл анлинкается. md5 добавляемого и извлеченного из архива файла совпадают.
Я наверное,попрошу администратора хостинга, где это присходит обновить zlib на сервере.
_________________
сервис DNS | разные http, DNS и прочие утилиты
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
eomysupport
Администратор
Администратор


Зарегистрирован: 25.12.2005
Сообщения: 5087

66545 Монеты

СообщениеДобавлено: Вс, 12 Окт, 2008 13:18    Заголовок сообщения: Ответить с цитатой

А, вот оно что... Я подумал что это как-то относится к нашим серверам Smile
_________________
Дмитрий

Техническая поддержка бесплатного хостинга осуществляется только через форум поддержки
Часто задаваемые вопросы по хостингу
Условия предоставления услуг бесплатного хостинга
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
lazutov
while (1==1);
Последний герой


Зарегистрирован: 30.04.2007
Сообщения: 3840

111220 Монеты

СообщениеДобавлено: Вс, 12 Окт, 2008 15:14    Заголовок сообщения: Ответить с цитатой

может кто подскажет, как вырезать символы в HEX форме ?
_________________
сервис DNS | разные http, DNS и прочие утилиты
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Gosudar
Два пингвина
Два пингвина


Зарегистрирован: 08.04.2007
Сообщения: 431

8014 Монеты

СообщениеДобавлено: Вс, 12 Окт, 2008 18:38    Заголовок сообщения: Ответить с цитатой

заменяет все двойные переводы строк на одинарные
Код:
<?php
$text = file_get_contents('ch.txt');
$text = str_replace("\n\n","\n",$text);
$text = str_replace("\r\n\r\n","\r\n",$text);

$fp = fopen ('l.txt','w');
fwrite($fp,$text);
?>


и :

Цитата:
trim
(PHP 3, PHP 4)

trim - вырезает пустое пространство в начале и в конце строки.

Описание
string trim (string str [, string charlist])

Примечание: необязательный параметр charlist был введён в PHP 4.1.0.

Эта функция возвращает строку с вырезанными в начале и конце строки str пробелами. Без второго параметра trim() вырезает:

" " (ASCII 32 (0x20)), обычный space/пробел.

"\t" (ASCII 9 (0x09)), символ tab.

"\n" (ASCII 10 (0x0A)), символ новой строки (line feed).

"\r" (ASCII 13 (0x0D)), символ carriage return/возврат каретки.

"\0" (ASCII 0 (0x00)), NUL-байт.

"\x0B" (ASCII 11 (0x0B)), символ vertical tab/вертикальной табуляции.

Вы можете также специфицировать вырезаемые символы в параметре charlist. Просто перечислите все символы, которые вы хотите вырезать. С помощью .. вы можете специфицировать диапазон символов.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов EOMY.NET -> Программирование для WEB Часовой пояс: GMT
Страница 1 из 1

 


EOMY TOP 100 Rambler's Top100   Рейтинг@Mail.ru    



Powered by phpBB © 2001, 2005 phpBB Group


Рейтинг SIMPLETOP.NET