2011-08-30 26 views
6

Tengo un sitio donde los usuarios pueden ingresar comentarios y descripciones. Les dejo ingresar enlaces también. Yo uso strip_tags con una excepción para los enlaces. También agrego rel="nofollow" a través de un simple string_replace.Comprobando la sintaxis del enlace de la entrada del usuario

El problema es que si los usuarios dejan fuera una doble cita al final de su etiqueta de apertura, ya que se rompe el html. ¿Alguna sugerencia sobre cómo verificar o corregir la sintaxis del enlace incorrecta?

$comment = $_POST['comment'];
$comment = strip_tags($comment,"<a>");
$comment = str_replace('<a','<a rel="nofollow"',$comment);
$comment = mysql_real_escape_string($comment);

y cuando se da salida

$ comentario = stripslashes ($ comentario);

echo $ comment;

El problema es cuando los usuarios agregan <a href="www.blah.com> y se olvidan de la última cotización doble, esta meta la pata de la forma en que los comentarios div pantallas.

+0

puede darle código de ejemplo? –

+0

que significaba, el código PHP con el str_replace que haces para el rel = "nofollow" –

+0

Lo sentimos. Mi primera vez en StackOverflow. Deberias hacer eso. – Brian

Respuesta

5

Esto es lo que tiene que hacer:

function fixLink($link) { 
    $link = str_replace(array('<a', '"', '</a>'), '', $link); 
    $link = str_replace(
     array('=', '>', ' '), 
     array('="', '">', '" '), 
     $link); 
    return '<a rel="nofollow' . $link . '</a>'; 
}  

echo fixLink('<a href="/index.html>asd</a>') . "\n"; 
echo fixLink('<a class="awesome" href="/index.html>asd</a>') . "\n"; 
echo fixLink('<a href="/index.html class="awesome">asd</a>') . "\n"; 
echo fixLink('<a target="_blank" href="/index.html class="awesome">asd</a>') . "\n"; 
echo fixLink('<a target="_blank" href="/index.html class="awesome>asd</a>') . "\n"; 
echo fixLink('<a target="_blank" href="/index.html target="_blank" class="awesome">asd</a>') . "\n"; 
echo fixLink('<a href="/index.html class=awesome">asd</a>') . "\n"; 

Eso sería:

<a rel="nofollow" href="/index.html">asd</a> 
<a rel="nofollow" class="awesome" href="/index.html">asd</a> 
<a rel="nofollow" href="/index.html" class="awesome">asd</a> 
<a rel="nofollow" target="_blank" href="/index.html" class="awesome">asd</a> 
<a rel="nofollow" target="_blank" href="/index.html" class="awesome">asd</a> 
<a rel="nofollow" target="_blank" href="/index.html" target="_blank" class="awesome">asd</a> 
<a rel="nofollow" href="/index.html" class="awesome">asd</a> 
+0

Wow. Gracias BoZ. Esto parece como algo que podría ser un problema común, pero no fue capaz de encontrar nada en ella. Esta solución debería funcionar bien. Gracias de nuevo. – Brian

+5

me alegra que te haya gustado. Espero que sea la mejor respuesta que puedas encontrar. –

+0

+1 ¡Agradable! mucho más rápido que una expresión regular – Tech4Wilco

Cuestiones relacionadas