preg_replace проблем

proba

Registered
Здравейте.
Опитвам се да направя нещо като bbcode
Примерно

PHP:
[code ]files/file.txt[/ code]
Само че code тага е без разстояние.

Целта ми е кодът от този файл да го изкарам в textarea.
Опитах така:

PHP:
$text = preg_replace("/\[code\](.+?)\[\/code\]/is",fileopen('$1'), $text);

А функцията която съм задал по-горе я направих да връща textarea-та + малко javascript който е към textarea-та (за броене на редовете в друга textarea и 2-те textarea се скролират заедно чрез този js, за това ми трябва с функция да е).

Но функцията връща грешка

Warning: file_get_contents($1) [function.file-get-contents]: failed to open stream: No such file or directory in D:\xampplite\htdocs\******-***\plugins\****_projects.php on line 34

Предполагам грешката идва от тук:

fileopen('1')

Взех кода за preg_replace от една тема за bbcode тук във форума.
Но там е направено да изкарва информацията в див , като пак кавичките са единични и в тях пише $1 , но тогава си връща резултат..

Някой да има идея как да го оправя ?
 
Оправя се , но идеята е да изпратя това което е вътре до функцията.
В момента се оправих по този начин де:

PHP:
$text = htmlspecialchars($r['text']);
$a = $text;
$a = explode("[code ]",$a);
$b = explode("[/code]",$a[1]);
$fileurl = $b[0];
$text = str_replace("[code ]".$fileurl."[/code]",fileopen($fileurl),$text);

И работи, но ако има как чрез preg_replace да заменя

[code ]нещо[/code] с fileopen('нещо'); и да работи ще бъде по-добре де ;)
 
http://php.net/manual/en/function.preg-replace-callback.php

Това е което ти трябва. Функцията preg_replace_callback за всеки match който намери извика съответната функция, минава резултата през нея и го връща. Примери има долу в мануала.

В случая, твоето ще стане така:

PHP:
$text = preg_replace_callback("/\[code\](.+?)\[\/code\]/is",'fileopen', $text);

Естествено трябва да си променш малко функцията да работи с matches, но прочетеш ли упътването към функцията в manual-a ще се оправиш.
 
Даваше грешка на file_get_contents-a ,но в manual-а видях че резултатът е масив и зададох вместо $file да взима $file[1] и всичко е точно.

Благодаря много, +1
 

Back
Горе