Как использовать функцию внутри строки?

'<a rel="nofollow" href="$1" class="bbc_link new_win" target="_blank">' 

Я хотел бы использовать функцию urlencode() :

  '<a rel="nofollow" href="urlencode($1)" class="bbc_link new_win" target="_blank">' 

… но я не могу использовать это:

  '<a rel="nofollow" href="'.urlencode($1).'" class="bbc_link new_win" target="_blank">' 

… потому что $1 не является переменной в строке; вместо этого это мета-переменная в простом свободном форуме.

он отправляет http://www.test.com/out.php?out=http://www.example.com

Solutions Collecting From Web of "Как использовать функцию внутри строки?"

как насчет этого сумасшедшего хака?

 <? $_ = 'urlencode'; echo "<a rel=\"nofollow\" href=\"{$_($1)}\" class=\"bbc_link new_win\" target=\"_blank\">"; 

Есть способ сделать это, но я советую и не использую его. вы не должны использовать вызовы функций внутри строк. Однако я опубликую пример, чтобы показать, на что способен PHP.

НО ЭТО ЧРЕЗВЫЧАЙНЫЙ ОБРАЗЕЦ ПЛОХОГО ПРОГРАММИРОВАНИЯ !!!!

 <?php class FunctionAgent{ public function __call($name,$args){ switch (count($args)){ case 0: return $name(); break; case 1: return $name($args[0]); break; case 2: return $name($args[0],$args[1]); break; case 3: return $name($args[0],$args[1],$args[2]); break; case 4: return $name($args[0],$args[1],$args[2],$args[3]); break; case 5: return $name($args[0],$args[1],$args[2],$args[3],$args[4]); break; } } } $_ = new FunctionAgent(); echo "the current date is {$_->date("ymd")}"; ?> 

Проверьте этот трюк:

 function foo() { return "title"; } $func = function($param) { return $param; }; $link = 'http://www.test.com/out.php?out=http://www.example.com'; echo "<a rel=\"nofollow\" href=\"{$func(urlencode($link))}\" class=\"bbc_link new_win\" target=\"_blank\">{$func(foo())}</a>"; 

$func() будет вызываться как функция, а выражение в круглых скобках будет оцениваться как любой другой PHP-код.

взломать здесь

Вы не можете этого сделать. Вам нужно закодировать значение, в котором оно создано, или где оно заменено в этой строке, а не в этом шаблоне, где у вас нет доступа к нему.

Я только что просмотрел раздел синтаксического анализа в руководстве по PHP и, похоже, не существует способа вызова функции из строки с кавычками (кроме динамического назначения имени переменной). Сожалею.

Вам нужно расширить, как работает ваш шаблонный движок, чтобы поддержать это. Невозможно заставить PHP сделать это за вас.