Как правильно выбрать строку из HTML страницы ?

Begin

Новичок
Как правильно выбрать строку из HTML страницы ?

есть некий HTML код:

...
<SPAN id=headerBodyType>SEDAN 4
DR</SPAN>
...

Мне нужно получить "SEDAN 4 DR", так как это видно в браузере.
Выделяю например с помощью strpos и substr и получаю:
"SEDAN 4
DR".

а мне нужно "SEDAN 4 DR". Как этого реализовать ? Или придется во всем HTML документе убирать лишние символы ?
 

Михалыч

Новичок
Begin
Вообще говоря, чтобы вывести "так как это видно в браузере" надо воспроизвести алгоритм работы конкретного браузера :)

Но ведь наверняка задача стоит проще. А потому, чтобы написать решение сначала надо сформулировать условие, определить некие правила. В данном случае будет два набора правил:
1) Правила, определяющие как ищутся строки
2) Правила, определяющие как найденные строки форматируются

Например они могут выглядеть так:
1) Найти содержимое всех тегов "span" с атрибутом "id"
2) Заменить любые количества идущих подряд пробельных символов (к ним относятся табудяция, перевод строки и т.д.) на один пробел.

После того как правила сформулированы, половина задачи решина. Остаётся только написать регулярные выражения.
PHP:
$input_text = "
  <SPAN id=headerBodyType>SEDAN        4
DR</SPAN>

<SPAN id=header>SEDAN 5
DRW</SPAN>
  ";
  # Ищем все строки, удовлетворяющие нашему правилу поиска
  preg_match_all('!<span .*?id=.*?>(.*?)</span>!is', $input_text, $matches);
  # Отбрасываем лишнее, оставляем лишь содержимое тегов
  $matches = $matches[1];
  # Применяем правило 2 (см. выше)
  for($i = 0; $i < count($matches); $i++) 
    $matches[$i] = preg_replace('/\s{2,}/', ' ', $matches[$i]);
Это один из вариантов
 

iceman

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

у него тока выводится многострочный текст...

теперь обработой strpos "\n" (заметь, двойные кавычки) и замени его на
PHP:
NULL
 

Begin

Новичок
Mr_Max, с preg_match тоже пробелы остаются. Приведи пример для конкретного случая.


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

Михалыч

Новичок
Begin
for($i = 0; $i < count($matches); $i++)
$matches[$i] = preg_replace('/\s{2,}/', ' ', $matches[$i]);
см. выше. Ни пробелов, ни переводов не останется.
 

Begin

Новичок
Автор оригинала: Михалыч
2) Заменить любые количества идущих подряд пробельных символов (к ним относятся табудяция, перевод строки и т.д.) на один пробел.
А если например в самом выделяемом тексте будут встречаются по два пробельных символа или больше ?
ну скажем в браузере "SEDAN 4(два пробела)DR", а после обработки "SEDAN 4 DR", хотя наверное это не существенно и не влияет на смысл. Но все-таки как правильно выделить оригинальный текст ?
 

Михалыч

Новичок
Begin
Я выше привёл фрагмент кода, там эта ситуация учтена. Посмотри сколько там у меня в тестовом тексте пробелов. Не поленись, запихни это в отдельный php-файл и посмотри как работает.
 

Begin

Новичок
Михалыч, все работает, спасибо!

-~{}~ 26.05.07 15:05:

Автор оригинала: baev
— и как Вы «вставлять обратно» собираетесь?
соединяю так:

$headerBodyType = "SEDAN 4 DR"; #получаю после выделения
$str1 = "...<SPAN id=headerBodyType>";
$translate = get_translate($headerBodyType); # перевод "СЕДАН 4 ДВЕРИ"
$str2 = "</SPAN>...";

$result = $str1.$translate.$str2;
 
Сверху