выловить название элемента и атрибуты в ХТМЛ форме с учётом тово что внутри атрибута возможно экранирование " и ' при помощи \, пример:
<input type="text" name="login" value="some \"text\""/>
в результате:
[type]="text"
[name]="login"
[value]="some \"text\""
Вроде написал регулярку и проверил в PCRE.RU - работает
оформил в код и неработает.
Сама регулярка:
@(\w+?)=((\"|\')(?:\\?.)*?\3)@se
Кусок кода:
preg_replace(
'@(\w+?)=((\"|\')(?:\\?.)*?\3)@se',
'$atributes[\'\\1\']=trim(\'\\2\',\'\"\')',
$e2);
Помогите люди добрые! [quote]
Спустя 18 минут, 28 секунд (15.04.2010 - 12:09) twin написал(а):
Да не вопрос, чего же не помочь хорошему человеку... Это мы за всегда рады. Поможем, чего уж там. У нас не застрянет...
Информативный ответ? Примерно такой, как название темы. Смени название на осмысленное, пока не забанили))
Информативный ответ? Примерно такой, как название темы. Смени название на осмысленное, пока не забанили))
Спустя 5 минут, 2 секунды (15.04.2010 - 12:14) mad/crs написал(а):
Сорри.. непойму как поменять название..
Спустя 5 минут, 27 секунд (15.04.2010 - 12:19) twin написал(а):
Кнопка "редактировать"
Спустя 18 минут, 21 секунда (15.04.2010 - 12:37) twin написал(а):
Так, а теперь по подробнее, что нужно получить на выходе
Спустя 7 минут, 7 секунд (15.04.2010 - 12:45) mad/crs написал(а):
На выходе получить массив в котором:
$array[название атрибута]=содержимое атрибута.
Всё дело в том что есть необходимость предусмотреть использование кавычек в нутри содержимово и соответственно надо учесть экранирование. "Откусывать" всё содержимое атрибута игнорируя \" или \'
$array[название атрибута]=содержимое атрибута.
Всё дело в том что есть необходимость предусмотреть использование кавычек в нутри содержимово и соответственно надо учесть экранирование. "Откусывать" всё содержимое атрибута игнорируя \" или \'
Спустя 18 минут, 58 секунд (15.04.2010 - 13:04) twin написал(а):
Странно ты используешь функцию preg_replace
Она совсем не так работает. А с модификатором "e" вообще осторожнее надо бы.
Вот так, только насчет апострофов недопонял. Где они могут быть?
Она совсем не так работает. А с модификатором "e" вообще осторожнее надо бы.
Вот так, только насчет апострофов недопонял. Где они могут быть?
$text = '<input type="text" name="login" value="some\"text\""/>';
preg_match_all('#"[^"\\\]*(\\\.[^"\\\]*)*"#uis', $text, $out);
print_r($out[0]);
Спустя 17 минут, 38 секунд (15.04.2010 - 13:21) mad/crs написал(а):
Спасибо за ответ и терпение
По поводу странно я сагласен но так будет быстрее мне кажется тем более что данные которые обрабатываются таким образом не будут приходить со стороны пользователя, тоесть безопасны. это шаблоны форм которые хранятся на серваке.
после preg_match_all я неполучу асоциативный массив [атрибут]=значение а мне это жуть как надо
И на сколько я понял вариант atribute='data' будет проигнорирован?! так же как и atribute='quotes"rulez"forever\'!'
По поводу странно я сагласен но так будет быстрее мне кажется тем более что данные которые обрабатываются таким образом не будут приходить со стороны пользователя, тоесть безопасны. это шаблоны форм которые хранятся на серваке.
после preg_match_all я неполучу асоциативный массив [атрибут]=значение а мне это жуть как надо
И на сколько я понял вариант atribute='data' будет проигнорирован?! так же как и atribute='quotes"rulez"forever\'!'
Спустя 16 минут, 54 секунды (15.04.2010 - 13:38) mad/crs написал(а):
Если долго биться то можно и убиться. Но мне повезло! Нашёл где "собака":
проблема в экранирующем символе \. Надо было мне в регулярке три слеша ставить
тоесть регулярка: @(\w+?)=((\"|\')(?:\\?.)*?\3)@se
а правильно так: @(\w+?)=((\"|\')(?:\\\?.)*?\3)@se
Проверял та я онлаин а там как раз таки надо 2 слэша а не 3 как правильно
И если бы не twin я бы и не увидел ошибку
Спасибо за внимание можно закрыть тему!
проблема в экранирующем символе \. Надо было мне в регулярке три слеша ставить
тоесть регулярка: @(\w+?)=((\"|\')(?:\\?.)*?\3)@se
а правильно так: @(\w+?)=((\"|\')(?:\\\?.)*?\3)@se
Проверял та я онлаин а там как раз таки надо 2 слэша а не 3 как правильно
И если бы не twin я бы и не увидел ошибку
Спасибо за внимание можно закрыть тему!