Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Замена подстрок по шаблону

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Itan
Отправлено: 28 Ноября, 2011 - 11:17:39
Post Id


Частый гость


Покинул форум
Сообщений всего: 199
Дата рег-ции: Окт. 2008  


Помог: 0 раз(а)




Здравствуйте! Помогите, пожалуйста, составить функцию, которая заменяет подстроки по шаблону.

Например, есть текст:
CODE (htmlphp):
скопировать код в буфер обмена
  1. Текст, текст, текст картинка - [p|14]. Текст, текст, текст, ссылка [n|47]


Первая буква в квадратных скобках - это идентификатор, например, р- фото, n - новость.

И надо, чтобы все подстроки были заменены на html.

Например, [p|14] на <img src="14">
А [n|47] на <a href="47">47</a>

Пробовал так сделать, но чет не работает:
PHP:
скопировать код в буфер обмена
  1.  
  2. function refimane($text) {
  3.         while(strstr($text, "[")) {
  4.                 $first = strpos($text, '[')+1;
  5.                 $second = strpos($text, ']');
  6.                 $v = substr($text, ($first), ($second-$first));
  7.                 $e = explode ("|", $v);
  8.                 if ($e[0] == 'p' and is_array($photo = base_query('SELECT name, path, big_path, alb FROM cms_photo WHERE id ="'.$e[1].'"'))) {
  9.                         $s = '<a href="/photo/'.$photo['big_path'].'" rel="gb_imageset['.$photo['alb'].']" title="'.$photo['name'].'"><img src="/photo/'.$photo['path'].'" alt="'.$photo['name'].'"></a>'."\n";
  10.                 }
  11.                 $z = '['.$e[0]."|".$e[1].']';
  12.                 $f = str_replace($z, $s, $text);
  13.                 $text = $f;
  14.         }
  15.         return $text;
  16. }
  17.  


Нашел этот кусок кода в прошлогоднем проекте, но переделать не смог под новые требования.

(Отредактировано автором: 28 Ноября, 2011 - 11:29:25)

 
 Top
Мелкий Супермодератор
Отправлено: 28 Ноября, 2011 - 11:30:48
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




PHP:
скопировать код в буфер обмена
  1. $new_text = preg_replace_callback('@\[(.+)\|(\d+)\]@u', function($match) {
  2. switch ($match[1]) {
  3. case 'p':
  4. return '<img src="'.$match[2].'">';
  5. }
  6. },$orig);

Писал сходу, без проверки. PHP5.3 и выше.


-----
PostgreSQL DBA
 
 Top
Itan
Отправлено: 28 Ноября, 2011 - 12:06:48
Post Id


Частый гость


Покинул форум
Сообщений всего: 199
Дата рег-ции: Окт. 2008  


Помог: 0 раз(а)




Спасибо! Долго ломал голову, почему ничего не выводит Улыбка Видимо, опечатались - @\[(.+)\|(\d+)\]@u заменил на @\[(.+)\|(\d+)\]@i
 
 Top
Мелкий Супермодератор
Отправлено: 28 Ноября, 2011 - 12:24:33
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




И помогло?
Проверил - нужен модификатор U, регулярка слопала много лишнего.
i - регистронезависимость - здесь вроде не при делах, в регулярке одни спецсимволы.
а u - unicode - поставил по привычке Закатив глазки


-----
PostgreSQL DBA
 
 Top
Itan
Отправлено: 28 Ноября, 2011 - 15:06:35
Post Id


Частый гость


Покинул форум
Сообщений всего: 199
Дата рег-ции: Окт. 2008  


Помог: 0 раз(а)




А, ну не знаю) Если u стоит, то функция вообще ничего не выводит. Переменная new_text пустая Улыбка А без неё - нормально всё.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Напишите за меня, пожалуйста »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB