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
Форумы портала PHP.SU :: Версия для печати :: preg_replace_callback
Форумы портала PHP.SU » PHP » Регулярные выражения » preg_replace_callback

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

1. ALEN - 27 Октября, 2008 - 09:41:26 - перейти к сообщению
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.  
2. Вездеход - 27 Октября, 2008 - 09:56:38 - перейти к сообщению
вывод цифр в вашем случае осуществляется в самой функции. а изза этого текст из функции выводится в начале. я не знаю точно с чем это связано но знаю что так =)
чтобы исправить это - нужно сделать так, чтобы функция ВОЗВРАЩАЛА значение. т.е. те самые цифры которые вы выводите. а потом уже вы их выводите. =)

как это осуществить в вашем случае сложно сказать... щас гуру придут объяснят =)
3. ALEN - 27 Октября, 2008 - 10:01:11 - перейти к сообщению
ВездеходЯ тоже знаю, но вот как обойти или альтернатива...
4. Champion - 27 Октября, 2008 - 10:14:35 - перейти к сообщению
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.  
5. ALEN - 27 Октября, 2008 - 10:20:07 - перейти к сообщению
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.  
6. Champion - 27 Октября, 2008 - 11:26:37 - перейти к сообщению
Это вроде только закомменченым вар_дампом отличается от того, что я написал. То что то, что я написал, выводит все в том порядке, как вы хотели - в этом я уверен
7. ALEN - 27 Октября, 2008 - 12:12:56 - перейти к сообщению
Champion
В том случае да, но мне нужен общий случай. Я не знаю как пользователям взбрендит вводить данные. А то чисто пример решения проблемы. Да и вобще, когда знаешь колличество всего можно подогнать все. Но это тормознет обработку, чего я не желаю. Нужен более простой вариант.
8. Champion - 27 Октября, 2008 - 12:14:45 - перейти к сообщению
Я так понял что где-то в середине текста у вас встречается php код, который должен выполниться, остальное выводится без изменений. Это я и сделал
9. ALEN - 27 Октября, 2008 - 13:23:01 - перейти к сообщению
Champion
PHP код может встретиться в начале строки, в конце, только php, может вообще его не быть, может встретится несколько раз.
10. Champion - 01 Ноября, 2008 - 13:49:27 - перейти к сообщению
ну а
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);

 

Powered by ExBB FM 1.0 RC1