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

me gustaría utilizar la función urlencode():¿Cómo usar una función dentro de una cadena?

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

... pero no puedo usar esto:

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

... porque $1 no es una variable de la cadena ; en cambio, es una metavariable en un simple foro gratuito.

que enviar http://www.test.com/out.php?out=http://www.example.com

Respuesta

2

No se puede hacer esto. Debe codificar el valor donde se genera o dónde se reemplaza en esta cadena, no en esta plantilla donde no tiene acceso.

2

Acabo de revisar el string parsing section of the PHP manual y no parece haber una manera de llamar a una función dentro de una cadena entrecomillada (excepto para asignar dinámicamente un nombre de variable). Lo siento.

0

Debe ampliar el funcionamiento de su motor de plantillas para poder admitir esto. No hay forma de que PHP lo haga por usted.

3

Hay una manera de hacer esto, pero sigue mi consejo y no lo uses. no debe usar llamadas a funciones dentro de cadenas. Sin embargo, voy a publicar un ejemplo solo para mostrar de qué PHP es capaz.

PERO ESTA ES UNA EXTREMA MUESTRA DE MALA PROGRAMACIÓN !!!!

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

Tu advertencia hace eco en mi intuición. Pero el único problema con esto que puedo explicar es que es una convención desconocida. Las clases/objetos son de hecho [malas prácticas] (http://en.wikipedia.org/wiki/Poltergeist_ (computer_science)) _ _en un contexto OOP_. Si 'FunctionAgent' hace la vida de un desarrollador más fácil (y cada milisegundo de tiempo de ejecución del script no es una preocupación), ¿por qué no usarlo? –

+1

@smhmic Mi regla de oro es: ceñirse a lo que las personas esperan o documentarlo de manera verbos. Es muy interesante lo raro que es que rompas las "reglas" si tienes que escribir una explicación profunda de lo que estás haciendo, por qué lo haces y qué "limpiador" se te acerca y se descarta. Pero al mirar este código de 3 años me di cuenta de que debería usar 'call_user_func' –

6

¿qué tal este hack loco?

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

Salida este truco:

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() se llamará como una función, y la expresión entre paréntesis se evaluará como cualquier otro tipo de código PHP.

hack is found here

Cuestiones relacionadas