Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.11.2013, 18:42   #1
Лубышев
Участник клуба
 
Аватар для Лубышев
 
Регистрация: 23.07.2007
Сообщений: 1,054
Вопрос Обработака плейсхолдеров на PHP

Плейсхолдер - специальная вставка в строку, которая после ее обработки будет заменена на соотвествующее выражение.

Я не силен в регулярках и сталкнулся со следующей задачей:
есть какая то строка (ну типа html шаблон) и в нем есть плейсхолдеры такого типа: [[+имя_юзера]]

мне надо чтобы эта строка заменилась значениями из моего асациативного массива

$placeholders['имя_юзера']

и соответственно если не существует в массиве данного ключа, то он должен заменить на пустоту. типа если есть такой плейсхолдер [[+неизвестная_переменная]], то он должен исчезнуть
Писано по д'Эльфийски

Последний раз редактировалось Лубышев; 05.11.2013 в 18:45.
Лубышев вне форума Ответить с цитированием
Старый 05.11.2013, 19:41   #2
Лубышев
Участник клуба
 
Аватар для Лубышев
 
Регистрация: 23.07.2007
Сообщений: 1,054
По умолчанию

Не дождался я решения, а оно вот, вдруг кому полезно будет)))


Код:

			$content=file_get_contents('cabinet.tpl');
                        preg_match_all('/\[\[\+([^\]]+)\]\]/', $content, $matches,  PREG_SET_ORDER);
                      
			foreach($matches as $match)
			{
 				if(isset($placeholders[$match[1]]))
 				{
					$return[$match[0]]=$placeholders[$match[1]];
  				}
  				else
  				{
  					$return[$match[0]]=NULL;
				}
			}
			
			$content=str_replace(array_keys($return),array_values($return), $content);
  			echo $content;
то есть мы с помощью preg_match_all('/\[\[\+([^\]]+)\]\]/', $content, $matches, PREG_SET_ORDER); создали двумерный массив того что заменять на что заменять.

ну и потом мы с помощью $content=str_replace(array_keys($re turn),array_values($return), $content); произвели замены в строке content.
Писано по д'Эльфийски
Лубышев вне форума Ответить с цитированием
Старый 05.11.2013, 21:48   #3
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,160
По умолчанию

Чет ерунда, это не плейсхолдеры это шаблоны и некое подобие шаблонизатора
Плейсхолдеры позволят делать Замены в основном в запросах к бд, одеспечивая безопасноть от иньекций

Опять же, регулярки тормозят нехило
ADSoft вне форума Ответить с цитированием
Старый 06.11.2013, 03:26   #4
Лубышев
Участник клуба
 
Аватар для Лубышев
 
Регистрация: 23.07.2007
Сообщений: 1,054
По умолчанию

не путайте плейсхолдеры и плейсхолдеры)

плейсхолдеры в данном случае это заменяемая специальная вставка.
а еще в HTML5 есть плейсхолдеры, которые пишутся в полях как подсказки)
а в идеологии CMS ModX, например, аж целых два понятия плейсхолдера.
а по поводу тормознутости регулярок, то как бы и PHP не компилированный бинарник)
Писано по д'Эльфийски

Последний раз редактировалось Лубышев; 06.11.2013 в 03:29.
Лубышев вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
статья - Бесплатный PHP, HTML, CSS, JavaScript редактор ? Codelobster PHP Edition Pblog Обсуждение статей 0 20.04.2012 14:50
TopServer(PHP+MySQL+Apache+/etc), и обновление компонентов(в основном PHP) Пепел Феникса Софт 2 05.11.2011 14:38
Вебинар по PHP - для тех, кто хочет начать изучение PHP, 30 июля. PHPLance HTML и CSS 0 23.07.2011 22:33
что не так с php кдом или с настройками MySQL+PHP Jimmi Помощь студентам 2 27.12.2010 09:03
Обработака ошибок Claster Помощь студентам 0 24.12.2009 19:06