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

Форум PHP

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

 

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

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

тема: Ошибки при преобразовании строки в массив
 
 автор: Владимир55   (04.01.2010 в 15:34)   письмо автору
 
 

Информация содержится в текстовом файле и преобразуется в массив следующим образом:
        $text = file_get_contents("1.txt");

        $m_text = explode(" ", $text);

Контролируя содержимое массива, я обнаружил, что в некоторых случаях в элемент массива вошло не одно слово, а два. Проконтролировав этот участок текстового файла посредством редактора WinHex, я вижу там код 20 - точно так же, как и в пробелах между другими словами.

Чем объяснить этот сбой?

  Ответить  
 
 автор: Trianon   (04.01.2010 в 15:40)   письмо автору
 
   для: Владимир55   (04.01.2010 в 15:34)
 

в этом файле только одна строка?

  Ответить  
 
 автор: Владимир55   (04.01.2010 в 15:57)   письмо автору
 
   для: Trianon   (04.01.2010 в 15:40)
 

В текстовом файле много слов, разделенных пробелами. Есть переводы строк, но перед каждым из них тоже имеется пробел.

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

Так оно и получилось, но в некоторых случаях в элемент массива вошло не одно слово, а два. Причем между этими словами виден пробел.

Для прояснения ситуации я в переменной $text заменил все пробелы на служебное слово, состоящее из трех долларов ($$$), и сохранил результат в файл.

Абсолютно все пробелы заменились.

Тогда я использовал $$$ как разделитель
$m_text = explode("$$$", $text);
и опять вижу сбой в том же элементе массива, что и ранее.

  Ответить  
 
 автор: Владимир55   (04.01.2010 в 16:22)   письмо автору
 
   для: Владимир55   (04.01.2010 в 15:57)
 

Намек понял. Дело прояснилось.

  Ответить  
 
 автор: Trianon   (04.01.2010 в 16:32)   письмо автору
 
   для: Владимир55   (04.01.2010 в 16:22)
 

клеилось последнее слово предыдущей строки с первым последующей строки?

  Ответить  
 
 автор: Владимир55   (04.01.2010 в 16:48)   письмо автору
 
   для: Trianon   (04.01.2010 в 16:32)
 

Вроде бы и не клеилось, ибо между ними код 20 существует.

Решило дело
$text = str_replace(chr(13).chr(10), " ", $text);

  Ответить  
 
 автор: ~AquaZ~   (04.01.2010 в 19:21)   письмо автору
 
   для: Владимир55   (04.01.2010 в 16:48)
 

Тогда код был не
0020
а
0013 0010
т.е.
<?
"\r\n"
, браузер ведь игнорирует переносы строки!

  Ответить  
 
 автор: Владимир55   (04.01.2010 в 20:12)   письмо автору
 
   для: ~AquaZ~   (04.01.2010 в 19:21)
 

Это я знаю, но поскольку проблема снялась, то больше изучать её не стал.
А точнее потому, что даже предположить невозможно, в чем тут была хитрость.

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

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