Замена символа по коду

arashvg

Поступил мне заказ. Как мне описали ТЗ:

  1. Есть файл, в котором несколько статей,
  2. Каждая строка разделена тремя или более Enter-ами,
  3. Статья состоит из заголовка, первой строки, и текста,
  4. Все остальные строки, где абзацев меньше трех...

и т. д.

Написал скрипт в Notepad++. Для разбивки и определения абзацев использовал символ \n.

Пример (этот код разбивал мой текст на элементы массива, разделены тремя абзацами):

$arraytext= explode("\n\n\n", $contents);

Когда заказчик начал проверять, оказалось, что у него вручную файл не разбивает. А копирует текст из редактора — в каждой строке видны непонятные пробелы. Я их скопировал и пропустил через скрипт для вывода кода символов:

$i=0;
$lines = file('111.txt');
foreach($lines as $single_line){
    echo ord($single_line[0]).'';
}

В итоге получил вот такой список кодов:

10 32 32 32 32 10 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32

Каким я вижу решение проблемы: заменить все символы с кодами 10 и 32 на \n, потом удалить лишние \n и мой скрипт будет работать с контентом.

Проблема: какой код у символа перевода строки \n, и как найти и заменить коды 10 и 32? Насколько я понимаю функция str_replace здесь не сработает.

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

1 ответ

arashvg

Попробуйте разбивать так:

preg_split("/(?:\\n[ \\r]*){3,}/, $arr);

Разбивает независимо от наличия пробелов и независимо от количества переводов строк.

licensed under cc by-sa 3.0 with attribution.