Автор Тема: Удаление пробелов лишних, не трогая тэги.  (Прочитано 11516 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн mike

  • ProPerl\'er
  • Старожил
  • ****
  • Сообщений: 435
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Удаление пробелов лишних, не трогая тэги.
« Ответ #15 : 18 Октября 2002, 14:50:53 »
Цитировать
а в яваскрипте может встретиться < и >?

Может, для динамического вывода HTML. И это не будет < > :)

[ основной браузер когда-то был, теперь попробуй разберись =]

Оффлайн Boatman

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 50
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Удаление пробелов лишних, не трогая тэги.
« Ответ #16 : 18 Октября 2002, 20:16:33 »
RomikChef
Цитировать
олько не вырезаем и обрабатываем, а вырезаем, если не тег, то обрабатываем, и вклеиваем в новую строку. А если тег - то просто вклеиваем.


если тэг, может его пропустить, не вырезая?

Я наверно неправильно твою идею понял, если не трудно объясни попонятнее

Оффлайн Меняздесьдавнонет

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Удаление пробелов лишних, не трогая тэги.
« Ответ #17 : 20 Октября 2002, 20:34:01 »
ты этим скриптом не исходную строку обрабатываешь!
нету в РНР функций таких - обрабатывать, не обрабатывать.
ты вырезаешь по кусочку из исходной строки, и добавляешь в новую!
вот строка
aaabbb
в процессе работы скрипта у тебя будет три итерации.
новая строка будет выглядеть так:
1.aaa
2.aaa
3.aaabbb
это если без обработки.

как тебе еще объяснить?
взял кусок из первой, посмотрел - если не тег, то обработал, и приставил к новой строке.
потом следующий кусок взял  - и так до конца строки.
тебе нужно всего две функции - strpos с третьим параметром и substr

Оффлайн Boatman

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 50
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Удаление пробелов лишних, не трогая тэги.
« Ответ #18 : 21 Октября 2002, 00:51:24 »
спасибо, я уже понял и сделал.

Только он текст 120 КБ обрабатывает за 1 сек. без учета обработки самого содержимого тэгов. это на 500 целероне.
Многовато по-моему

Оффлайн Меняздесьдавнонет

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Удаление пробелов лишних, не трогая тэги.
« Ответ #19 : 21 Октября 2002, 01:48:59 »
Да, пожалуй, многовато.
но вот только рег придумать я затрудняюсь.
а дай посмотреть, как ты написал?
я у себя потестирую

Оффлайн Tronyx

  • Модератор
  • Ветеран
  • *****
  • Сообщений: 826
  • +0/-0
  • 2
    • Просмотр профиля
Удаление пробелов лишних, не трогая тэги.
« Ответ #20 : 21 Октября 2002, 16:29:19 »

<?
preg_match_all("/([^<>]+)|(<[^<>]+>)/"$text$text_blocks);

$size=sizeof($text_blocks[0]);
$text="";

for(
$i=0$i<$size$i++) {
    if (
$text_blocks[1][$i] != "")
        
$text.=preg_replace("/  +/"" "$text_blocks[1][$i]);
    else
       
$text.=$text_blocks[2][$i];
}
echo 
$text;
?>
С уважением, Владимир Гончаренко - COPI# 93
Ролевая онлайн игра

Оффлайн Boatman

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 50
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Удаление пробелов лишних, не трогая тэги.
« Ответ #21 : 21 Октября 2002, 19:44:19 »
	

<?

$data stripslashes($content);
// удаляем из юзерских данных слэши

$pos=0;
// нач. позиция

$currpos 1;
// текущая позиция, 1 - чтоб запустить цикл.

$left=true;
// ищем сперва <

function process($thing)
{
// почти пустая функция, кот. обрабатывает содержимое между тегами

 
return \'Между тэгами:\'.$thing;
}

while($currpos)
	
{
	
	
if($left) // ищем сейчас левую скобку
	
	
	
{
	
	
	
	
$currpos = strpos($data, \'<\', $pos);
// pos - текущая позиция курсора
	
	
	
	
if($currpos) $result .= process(substr($data, $pos+1, $currpos-$pos-1));
// если нашли вырезаем от текущей позиции до новой и передаем в функцию process
	
	
	
	
else $result .= process(substr($data, $pos+1));
// если нет больше закрыв. скобок -  обрабатываем остаток строки
	
	
	
	
$pos = $currpos;
// перемещаем курсор
	
	
	
	
$left = false;
// ищем >
	
	
	
}
	
	
else 
	
	
	
{
	
	
	
	
$currpos = strpos($data, \'>\', $pos);
	
	
	
	
if($currpos) $result .= substr($data, $pos, $currpos-$pos+1);
// то же самое, но тэги без изменений передаем.
	
	
	
	
else $result .= substr($data, $pos);
	
	
	
	
$pos = $currpos;
	
	
	
	
$left = true;
// ищем <
	
	
	
}
	
}
?>
<form action="" method=post>
<textarea name="content" cols="70" rows="20"><?=htmlspecialchars($result, ENT_NOQUOTES)?>
<!-- это чтоб ХТМЛ исходник сразу виден был --></textarea></div>


<input type="submit" name="go" value="Submit">
<input type="reset" name="Reset" value="Reset">
</form>

<hr width=95%>
<p><?=$result?>


Вроде не забыл ничего.

Оффлайн Меняздесьдавнонет

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Удаление пробелов лишних, не трогая тэги.
« Ответ #22 : 21 Октября 2002, 21:11:48 »
А скрипт Tronyx-а сколько работает?

Оффлайн Tronyx

  • Модератор
  • Ветеран
  • *****
  • Сообщений: 826
  • +0/-0
  • 2
    • Просмотр профиля
Удаление пробелов лишних, не трогая тэги.
« Ответ #23 : 21 Октября 2002, 21:25:49 »
Файл в 120 Кб обрабатывается в среднем за четверть секунды, считывание файл не считалось, замерял приведённый выше код.
У меня php4.2.3, PIII - 533
С уважением, Владимир Гончаренко - COPI# 93
Ролевая онлайн игра

Оффлайн Boatman

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 50
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Удаление пробелов лишних, не трогая тэги.
« Ответ #24 : 22 Октября 2002, 19:08:22 »
Цитировать
Файл в 120 Кб обрабатывается в среднем за четверть секунды, считывание файл не считалось, замерял приведённый выше код.


У меня примерно столько же, но это все равно далеко не 0.01 сек. :(

Оффлайн Tronyx

  • Модератор
  • Ветеран
  • *****
  • Сообщений: 826
  • +0/-0
  • 2
    • Просмотр профиля
Удаление пробелов лишних, не трогая тэги.
« Ответ #25 : 22 Октября 2002, 19:54:57 »
Цитировать
У меня примерно столько же, но это все равно далеко не 0.01 сек.

Не нравится пиши на СИ.;)
С уважением, Владимир Гончаренко - COPI# 93
Ролевая онлайн игра

Оффлайн Metaller

  • Мелкое злобное существо
  • Ветеран
  • *****
  • Сообщений: 538
  • +0/-0
  • 2
    • Просмотр профиля
    • http://michael.pp.ru
Удаление пробелов лишних, не трогая тэги.
« Ответ #26 : 23 Октября 2002, 11:01:23 »
Лучше на асме....
Everybody\'s Got A Ticket To Ride Except For Me And My Lightning...

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28