2010-12-15 3 views
7
'<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

答えて

2

送ります。生成された場所、またはこの文字列で置き換えられる場所の値をエンコードする必要があります。このテンプレートにはアクセスできません。

2

私はちょうどstring parsing section of the PHP manualを見直しました。引用符付きの文字列内から関数を呼び出す方法はありません(変数名を動的に割り当てることを除く)。ごめんなさい。

0

あなたのテンプレートエンジンは、これをサポートするために、どのように機能するかを拡張する必要があります。 PHPをあなたのためにする方法はありません。

3

あり、これを行うための方法ですが、私のアドバイスを取り、それを使用しないでください。文字列の中で関数呼び出しを使うべきではありません。 しかし、私はPHPができることを示すために例を掲載します。

しかし、これはBADプログラミングEXTREMEサンプルです!!!!

<?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("y-m-d")}"; 

?> 
+0

あなたの警告は私の直感をエコーし​​ます。しかし、私が実際に尋ねることのできる唯一の問題は、それがあまり知られていないということです。クラス/オブジェクトは、[悪い習慣](http://en.wikipedia.org/wiki/Poltergeist_(computer_science))確かにある - OOPのCONTEXT_ _IN。 'FunctionAgent'が開発者の生活をより簡単にする(そして、スクリプト実行時間のミリ秒ごとに関心事ではない)場合、なぜそれを使用しないのですか? –

+1

私の黄金のルールがある@smhmic:人々が期待するかverboslyそれを文書化するものに固執します。あなたが何をしているかの深さの説明を記述する必要があれば、「ルール」は、なぜあなたはそれをやっているyouconsideredと退け、「クリーン」なアプローチAEどのようにまれなあなたブレーキ非常に興味深いです。しかし、この3年前のコードを見ると、 'call_user_func' –

6

このクレイジーハックはどうですか?

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

このトリックをチェックアウト:

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コードとして評価されます。

hack is found here

関連する問題