2010-12-15 13 views
7
'<a rel="nofollow" href="$1" class="bbc_link new_win" target="_blank">' 

Vorrei usare la funzione urlencode():Come utilizzare una funzione all'interno della stringa?

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

... ma non posso usare questo:

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

... perché $1 non è una variabile nella stringa ; è invece una meta-variabile in un semplice forum gratuito.

it invia http://www.test.com/out.php?out=http://www.example.com

risposta

2

Non si può fare questo. È necessario codificare il valore in cui è stato generato o in cui è stato sostituito in questa stringa, non in questo modello in cui non si ha accesso ad esso.

0

È necessario estendere il funzionamento del motore dei modelli per supportarlo. Non c'è modo di fare in modo che PHP lo faccia per te.

3

C'è un modo per farlo, ma segui il mio consiglio e non usarlo. non dovresti usare le chiamate di funzione dentro le stringhe. Comunque pubblicherò un esempio solo per mostrare di cosa è capace PHP.

MA QUESTO È UN ESEMPIO ESEMPIO DI PROGRAMMAZIONE MALE !!!!

<?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

tuo avvertimento fa eco la mia intuizione. Ma l'unico problema con questo che posso effettivamente esplicare è che è una convenzione non familiare. Classi/oggetti sono in effetti [cattive pratiche] (http://en.wikipedia.org/wiki/Poltergeist_ (computer_science)) - _in un contesto OOP_. Se 'FunctionAgent' semplifica la vita di un dev (e ogni millisecondo del tempo di esecuzione dello script non è un problema), perché non usarlo? –

+1

@smhmic La mia regola d'oro è: attenersi a ciò che le persone si aspettano o documentare in modo verboso. È molto interessante quanto sia raro frenare le "regole" se devi scrivere una spiegazione dettagliata di quello che stai facendo, perché lo fai e quale "più pulito" si avvicina a te e lo ignori. Ma guardando questo codice di 3 anni mi rendo conto che dovrei usare 'call_user_func' –

6

che ne dici di questo pazzo?

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

Partenza questo trucco:

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() sarà chiamato come una funzione, e l'espressione tra parentesi sarà valutata come qualsiasi altro codice PHP.

hack is found here

Problemi correlati