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

Форум Регулярные Выражения

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

 

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

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

тема: Замена HTML кода
 
 автор: sergey89   (06.09.2005 в 14:53)   письмо автору
 
 

Как известно при использовании ф-ии htmlspecialchars нельзя испльзовать HTML код в строке. И все наверное знаю про его замену строками типа [b][/b] и т.д. Мне надо использовать такие коды [tag=param]text[/tag] или [tag]text[/tag], ну дак вот. Как в одну переменную занести tag, во вторую param, а в третью text. Естественно текст везде может быть разным.

   
 
 автор: cheops   (06.09.2005 в 15:06)   письмо автору
 
   для: sergey89   (06.09.2005 в 14:53)
 

Не очень понятно в чём трудность? Вы хотите динамически эти тэги формировать или из HTML-формы?

   
 
 автор: sergey89   (06.09.2005 в 16:42)   письмо автору
 
   для: cheops   (06.09.2005 в 15:06)
 

Из HTML формы получать, а затем обрабатывать. Как я понял это делается при помощи регулярных выражний, но в них я увы не силён :(

   
 
 автор: cheops   (06.09.2005 в 17:58)   письмо автору
 
   для: sergey89   (06.09.2005 в 16:42)
 

Регулярные выражения нужно уже при интерпретации, я так понял сейчас проблема в формировании текста с этим тэгом или уже имеется текст, в котором размещены эти теги и нужно заменить их на реальные тэги HTML?

   
 
 автор: Киналь   (06.09.2005 в 18:13)   письмо автору
 
   для: sergey89   (06.09.2005 в 14:53)
 

То, что вы спрашиваете, называется bb-code, или псевдотеги. Поищите по форуму, не раз обсуждалось в разных вариантах=)

   
 
 автор: Sergey89   (06.09.2005 в 18:29)   письмо автору
 
   для: Киналь   (06.09.2005 в 18:13)
 

Киналь, именно это я и имел в виду ;)

   
 
 автор: cheops   (06.09.2005 в 18:46)   письмо автору
 
   для: Sergey89   (06.09.2005 в 18:29)
 

Так а что сделать с ними нужно? Вот несколько тем по bbCode
http://www.softtime.ru/forum/read.php?id_forum=6&id_theme=156
http://www.softtime.ru/forum/read.php?id_forum=6&id_theme=3251

   
 
 автор: Sergey89   (06.09.2005 в 19:08)   письмо автору
 
   для: cheops   (06.09.2005 в 18:46)
 

С этим спасибо. Возник ещё вопрос. допустим есть bbcode: Описание, надо перевести в <a href="http://www.sait.ru" target="_blank">Описание</a>, но может быть такой код: http://www.sait.ru или [url=]http://www.sait.ru[/url], в этом случае должно получиться <a href="http://www.sait.ru" target="_blank">http://www.sait.ru</a>

   
 
 автор: Sergey89   (06.09.2005 в 19:50)   письмо автору
 
   для: Sergey89   (06.09.2005 в 19:08)
 

Вот что нашёл:

<?
    
// matches a [url]xxxx://www.phpbb.com[/url] code..
    
$patterns[] = "#\[url\]([\w]+?://[\w\#$%&~/.\-;:=,?@\[\]+]*?)\[/url\]#is";
    
$replacements[] = $bbcode_tpl['url1'];

    
// [url]www.phpbb.com[/url] code.. (no xxxx:// prefix).
    
$patterns[] = "#\[url\]((www|ftp)\.[\w\#$%&~/.\-;:=,?@\[\]+]*?)\[/url\]#is";
    
$replacements[] = $bbcode_tpl['url2'];

    
// [url=xxxx://www.phpbb.com]phpBB[/url] code..
    
$patterns[] = "#\[url=([\w]+?://[\w\#$%&~/.\-;:=,?@\[\]+]*?)\]([^?\n\r\t].*?)\[/url\]#is";
    
$replacements[] = $bbcode_tpl['url3'];

    
// [url=www.phpbb.com]phpBB[/url] code.. (no xxxx:// prefix).
    
$patterns[] = "#\[url=((www|ftp)\.[\w\#$%&~/.\-;:=,?@\[\]+]*?)\]([^?\n\r\t].*?)\[/url\]#is";
    
$replacements[] = $bbcode_tpl['url4'];
?>


Но ничерта не разобраться :)

   
 
 автор: Sergey89   (07.09.2005 в 21:45)   письмо автору
 
   для: Sergey89   (06.09.2005 в 19:50)
 

Вобщем я почти разобрался. Вот, что я написал:


<?php
    $text 
"some text2 http://www.mlib.com.ru some text2<br>
             some text3 [url]www.promoforum.ru[/url] some text3<br>
             some text4 Форум умных людей some text4<br>
             some text5 [url=www.wmhstudio.ru]IT-студия WMH[/url] some text5<br>"
;

    print 
$text;
     
    
$text preg_replace("/\[url=(http:\/\/.*)\](.*)\[\/url\]/i""<a href=\"\\1\">\\2</a>"$text); //text 4
    
$text preg_replace("/\[url=(www\..*)\](.*)\[\/url\]/i""<a href=\"http:\/\\1\">\\2</a>"$text); //text  5
        
    
$text preg_replace("/\[url\](http:\/\/.*)\[\/url\]/i""<a href=\"\\1\">\\1</a>"$text); //text 2
    
$text preg_replace("/\[url\](www\..*)\[\/url\]/i""<a href=\"http:\/\\1\">\\1</a>"$text); //text 3
        
 // $text = preg_replace("/(http:\/\/(.*))/i", "<a href=\"\\1\">\\1 5</a>", $text);    //ПРОБЛЕММА!
    
print $text;
?>   


Единственна проблемма в строке проблемма! :) надо каким-то образом определить оставшиеся ссылки, без псевдотегов, но с префиксрм http://. Моё выражение конечно не работает, т.к. начинается поиск ысех нормальных url :(

   
 
 автор: Sergey89   (07.09.2005 в 22:11)   письмо автору
 
   для: Sergey89   (07.09.2005 в 21:45)
 

Вроде сделал:


<?
$text 
preg_replace("/([^\"\'<>]http:\/\/([a-zA-Z_0-9\.\?\&\#\;\:\+\-\=\%\/]*))/i"" <a href=\"http://\\2\">\\2</a> "$text);
?>

   
Rambler's Top100
вверх

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