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 :: preg_replace_callback

 PHP.SU

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


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

> Без описания
ALEN
Отправлено: 27 Октября, 2008 - 09:41:26
Post Id



Участник


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


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




CODE (text):
скопировать код в буфер обмена
  1.  
  2. <?php
  3. function phpcode($matches){
  4. eval($matches[1]);
  5. }
  6. $asindex_a10="Привет вася <?php for(\$i=1;\$i<10;\$i++){ echo \$i; } ?> пока вася";
  7. echo $asindex_a10 = preg_replace_callback("|\<\?php(.*)\?\>|","phpcode",$asindex_a10);
  8. ?>
  9.  

В результате выдает:
CODE (text):
скопировать код в буфер обмена
  1.  
  2. 123456789Привет вася пока вася
  3.  


Что-то тормажу, как сделать, чтоб ответ был:
CODE (text):
скопировать код в буфер обмена
  1.  
  2. Привет вася 123456789 пока вася
  3.  
 
 Top
Вездеход
Отправлено: 27 Октября, 2008 - 09:56:38
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 820
Дата рег-ции: Апр. 2008  
Откуда: Россия


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




вывод цифр в вашем случае осуществляется в самой функции. а изза этого текст из функции выводится в начале. я не знаю точно с чем это связано но знаю что так =)
чтобы исправить это - нужно сделать так, чтобы функция ВОЗВРАЩАЛА значение. т.е. те самые цифры которые вы выводите. а потом уже вы их выводите. =)

как это осуществить в вашем случае сложно сказать... щас гуру придут объяснят =)


-----
о великий nl2br!
Хочешь невероятных ощущений? Юзай блокнот! Блокнот - чудеса сбываются!
Чем меньше вы знаете PHP - тем ценнее мои знания!
 
 Top
ALEN
Отправлено: 27 Октября, 2008 - 10:01:11
Post Id



Участник


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


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




ВездеходЯ тоже знаю, но вот как обойти или альтернатива...
 
 Top
Champion Супермодератор
Отправлено: 27 Октября, 2008 - 10:14:35
Post Id



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


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


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




CODE (text):
скопировать код в буфер обмена
  1.  
  2. function phpcode($matches){
  3. var_dump($matches);
  4. echo $matches[1];
  5. eval($matches[2]);
  6. echo $matches[3];
  7. }
  8. $asindex_a10="Привет вася <?php for(\$i=1;\$i<10;\$i++){ echo \$i; } ?> пока вася";
  9. preg_replace_callback("|(.+)\<\?php(.*)\?\>(.+)|","phpcode",$asindex_a10);
  10.  
 
 Top
ALEN
Отправлено: 27 Октября, 2008 - 10:20:07
Post Id



Участник


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


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




Champion
Не все так просто:

CODE (text):
скопировать код в буфер обмена
  1.  
  2. <?php
  3. function phpcode($matches){
  4. //var_dump($matches);
  5. echo $matches[1];
  6. eval($matches[2]);
  7. echo $matches[3];
  8. }
  9. $asindex_a10="Привет вася <?php for(\$i=1;\$i<10;\$i++){ echo \$i; } ?> пока вася <?php for(\$i=10;\$i<20;\$i++){ echo \$i; } ?>";
  10. echo preg_replace_callback("|(.+)\<\?php(.*)\?\>(.+)|","phpcode",$asindex_a10);
  11. ?>
  12.  
 
 Top
Champion Супермодератор
Отправлено: 27 Октября, 2008 - 11:26:37
Post Id



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


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


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




Это вроде только закомменченым вар_дампом отличается от того, что я написал. То что то, что я написал, выводит все в том порядке, как вы хотели - в этом я уверен
 
 Top
ALEN
Отправлено: 27 Октября, 2008 - 12:12:56
Post Id



Участник


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


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




Champion
В том случае да, но мне нужен общий случай. Я не знаю как пользователям взбрендит вводить данные. А то чисто пример решения проблемы. Да и вобще, когда знаешь колличество всего можно подогнать все. Но это тормознет обработку, чего я не желаю. Нужен более простой вариант.
 
 Top
Champion Супермодератор
Отправлено: 27 Октября, 2008 - 12:14:45
Post Id



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


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


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




Я так понял что где-то в середине текста у вас встречается php код, который должен выполниться, остальное выводится без изменений. Это я и сделал
 
 Top
ALEN
Отправлено: 27 Октября, 2008 - 13:23:01
Post Id



Участник


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


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




Champion
PHP код может встретиться в начале строки, в конце, только php, может вообще его не быть, может встретится несколько раз.
 
 Top
Champion Супермодератор
Отправлено: 01 Ноября, 2008 - 13:49:27
Post Id



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


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


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




ну а
CODE (text):
скопировать код в буфер обмена
  1. function phpcode($matches){
  2. var_dump($matches);
  3. str_replse('<?', '', $matches[2]);
  4. str_replse('?>', '', $matches[2]);
  5. eval($matches[1]);
  6. }
  7. $asindex_a10="Привет вася <?php for(\$i=1;\$i<10;\$i++){ echo \$i; } ?> пока вася";
  8. preg_replace_callback("/.+\(<\?.*\?\>)(.+)/","phpcode",$asindex_a10);
 
 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