Модераторы: Aliance, skyboy, MoLeX, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Замена символов в рамках тэгов 
:(
    Опции темы
Wolf1994
Дата 25.12.2005, 16:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 5.10.2004

Репутация: 1
Всего: 29



Пожалуйста, помогите выполнить такую замену:
Код

htmlcodeadd<a href="1.php">1</a> abracadabra <a href="2.php">2</a>htmlcodeadd<a href="3.php">3</a>

на:
Код

htmlcodeadd<a href="1.php">1</a> abracadabra <a href="2.php">2</a>htmlcodeadd&lt;a href="3.php"&gt;3&lt;/a&gt;


То есть сделать все тэги в рамках htmlcodeadd - активными, а за рамками - печатными. Мне пока не хватает знаний:
Код

$document='htmlcodeadd<a href="1.php">1</a> abracadabra <a href="2.php">2</a>htmlcodeadd<a href="2.php">3</a>';
$document=str_replace ('<', '&lt;', $document);
$document=str_replace ('>', '&gt;', $document);

$search = array ('@(htmlcodeadd.*)(&lt;)(.*htmlcodeadd)@i',
                 '@(htmlcodeadd.*)(&gt;)(.*htmlcodeadd)@i');
$replace = array ('$1<$3',
                  '$1>$3');

print preg_replace ($search, $replace, $document);

- Всё на что хватило ума. Буду пробовать дальше, но не думаю, что получится что-то путное smile
PM MAIL WWW   Вверх
Wolf1994
Дата 25.12.2005, 18:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 5.10.2004

Репутация: 1
Всего: 29



Немного поэкспериментировав пришёл к выводу, что замена в приведённом примере осуществляется ОДИН раз. Можно ли присвоить &lt;&gt; параметры, которые заставять поменять ВСЕ эти тэги в рамках htmlcodeadd?
PM MAIL WWW   Вверх
Wolf1994
Дата 25.12.2005, 19:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 5.10.2004

Репутация: 1
Всего: 29



Нашёл выход!!! Переделал синтаксис тэгов и всё заработало (пример)!!! Вот результат:
Код

$tag="[tag]";
$tag1="[tag1]";
$tag2="[tag2]";
$tag3="[tag3]";

$temp='[tag1]<a href="1.php">1</a> abracadabra <a href="2.php">2</a>[tag1]<a href="3.php">3</a>[tag2]<a href="4.php">4</a>[tag2]ok';

//Ищу и запоминаю различные тэги
preg_match_all ("/\[(tag.?)\]/", $temp, $matches);

//Унифицирую тэги под один тэг, чтобы можно было разбить эксплодом
$temp=str_replace ($tag1, $tag, $temp);
$temp=str_replace ($tag2, $tag, $temp);
$temp=str_replace ($tag3, $tag, $temp);

//Разбиваю строку на составляющие
$ex=explode ($tag, $temp);

$temp="";
for ($i=0; $i<=count ($ex); $i++)
{
 if ( ($i+1)/2==floor (($i+1)/2) )//Обрабатываю чётные элементы массива разбитой строки
 {
  if ($matches [0] [$i-1]==$tag1)//Если запомненый тэг - tag1>обрабатываю, как одно выражение
  {
   $ex [$i]="îáðàáîòêà-1:".$ex [$i].":îáðàáîòêà-1";
  }
  if ($matches [0] [$i-1]==$tag2)
  {
   $ex [$i]="îáðàáîòêà-2:".$ex [$i].":îáðàáîòêà-2";//Если запомненый соответствующий тэг=tag2 - как другое
  }
  if ($matches [0] [$i-1]==$tag3)
  {
   $ex [$i]="îáðàáîòêà-3:".$ex [$i].":îáðàáîòêà-3";//...как третье
  }
 }
 //Собираю обработанные части строки в прежнюю строку
 $temp.=$ex [$i];
}
//Вывожу результат :)
print $temp;


Может кому-нибудь пригодится...
PM MAIL WWW   Вверх
-=Ustas=-
Дата 26.12.2005, 11:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ustix IT Group
****


Профиль
Группа: Участник Клуба
Сообщений: 2222
Регистрация: 21.1.2005
Где: Краснодар

Репутация: 6
Всего: 69



Извини за глупый вопрос... А для чего это может пригодиться? Что это ты сделал?


--------------------
В искаженном мире все догмы одинаково произвольны, включая догму о произвольности догм.
-----
PM WWW ICQ Skype   Вверх
Wolf1994
Дата 26.12.2005, 12:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 5.10.2004

Репутация: 1
Всего: 29



Скорее всего дам глупый ответ, так как не знаю как такое делается по стандартам, например в этом форуме. А мне это надо было, для скрипта формирования текста: если нет тэгов - экранируются спецсимволы+добавляются смайлики+активируются URL'ы, если тэг 1 - никакой обработки, чистый HTML, если тэг 2 - чистый HTML+добавляются смайлики, если тэг 3 - идёт окно для кода. Благодаря использованию регулярок, удалось ускорить работу скрипта в ~3 раза.

Кстати обработку URL я брал из "Ответы на часто задаваемые вопросы по программированию". И нашёл небольшую помарку. После исправления получился такой код:
Код

eregi_replace("((f|ht)tps?://[^ \r\n]*[^ \n]*[^ \n,.:!?)]*[^ \r\n,.:!?)])", "<a href=\"\\1\" target=\"_blank\">\\1</a>", $temp);

- там был тэг \r вместо \n / \r\n.
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Тексты | Следующая тема »


 




[ Время генерации скрипта: 0.0484 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.