'<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
как насчет этого сумасшедшего хака?
<? $_ = '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 сделать это за вас.