Регистрация
Вход через соцсети
Восстановление пароля

глюк с экранированием

Новый топик
12.09.2007, 20:59
Ответить | Цитировать
MihaKot
Аксарин Константин

Зарегистрирован:
2005-01-22
Сообщений: 38

Вот загвоздка.
если написать так.
Код:

$menu_text[top][active] = "".opt($data[$i][menu]==1,"<div
class='MenuText'><a href='%URL' title='%NAME'><span
class='l'>".preg_replace('/(^.)/', '$1</span>','%NAME')."</a></div>")."";

то выведет %NAME
а если
Код:
$menu_text[top][active]      = "".opt($data[$i][menu]==1,"<div
class='MenuText'><a href='%URL' title='%NAME'><span
class='l'>".preg_replace('/(^.)/', '$1</span>','%NAME')."</a></div>")."";

то выведет О копании

Это как понимать?
13.09.2007, 14:15
Ответить | Цитировать
DiGGy
DiGGy
DiGGy

Зарегистрирован:
2005-04-04
Сообщений: 1546

mihakot писал(а):
Это как понимать?


Во-первых, давайте посмотрим код процедур, куда Вы передаете эти данные.
А там Вы обнаружите что-то типа такого
Код:

...
eval( ... $menu_text[top][active] ... );
...
str_replace("%NAME",....);
...


т.е. Ваша переменная сначала выполняется, а потом подсталвются переменные %NAME и т.д.

В Вашем первом случае результатом выполнения preg_replace будет "%</span>NAME", что ясен пень не идентично с "%NAME", поэтому подстановка наименования раздела не осуществляется.

В Вашем втором случае результатом выполнения preg_replace будет "</span>%NAME", где потом "%NAME" заменяется на название раздела.

Во-вторых, Ваше регулярное выражение не учитывает всякие допустимые нюансы, например - название раздела может содержать ведущие пробелы, т.е. " О компании" - в этом случае Вы выделете не первую букву, а пустое место

В-третьих, мой Вам совет, скажу даже два примитивных варианта решения:
1. Использование своих функций:
Напишите свой sql запрос, в котором Вы от названия раздела уже отделите первую букву и выведите текст так, как Вам надо.

2. Использование стандартных функций: Объявляете переменную, вызываете процедуру неткета, а потом результат работы процедуры парсите по придуманной Вами логике. Для этой реализации предлагаю Вам ввести дополнительный символ, например ~ пример ниже:

Код:

$menu_text[top][active] = "<a href='%URL'>~%NAME~</a>";

preg_replace("/~(.)(.*)~/U","<span class='l'>$1</span>$2", s_browse_sub(..,$menu_text[top]) );

зы: допустимые ведущие пробелы в примере не удаляются, это уж Вы сами сделайте, и так всё расписал по деталям...

удачи.

Temet nosce...
13.09.2007, 18:19
Ответить | Цитировать
MihaKot
Аксарин Константин

Зарегистрирован:
2005-01-22
Сообщений: 38

Спасибо за идею.
Код:

$menu_text[bot][active] = "".opt($data[$i][menu]==2,"<div class='MenuText'><a href='%URL' title='%NAME'>~%NAME</a></div>")."rn";

а замена вот так
Код:

".preg_replace('/(.*)~(.)(.*)</a>(.*)rn/', "$1<span class='l'>$2</span>$3</a>$4rn", s_browse_level(0,$menu_text[top]))."

Наличие пробела в начала не имеет значения.
198 196 2007-09-13 18:19:46 9086
Описание проекта