2011-08-30 12 views
6

Ho un sito in cui gli utenti possono inserire commenti e descrizioni. Autorizzo anche loro a inserire link. Io uso strip_tags con un'eccezione per i collegamenti. Aggiungo anche rel="nofollow" attraverso un semplice string_replace.Controllo sintassi del collegamento di input utente

Il problema è che se gli utenti lasciano una virgoletta doppia alla fine del loro tag di apertura, incasina l'html. Qualche suggerimento su come verificare o correggere la sintassi del collegamento errata?

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

e quando l'output

$ comment = stripslashes ($ commento);

echo $ commento;

Il problema si verifica quando gli utenti aggiungono <a href="www.blah.com> e dimenticano l'ultimo doppi apice, questo incasina il modo in cui viene visualizzato il div del commento.

+0

si può dare il codice di esempio? –

+0

Intendevo, il codice PHP con lo str_replace che fai per il rel = "nofollow" –

+0

Scusa. La mia prima volta su StackOverflow. Questo dovrebbe farlo. – Brian

risposta

5

Ecco cosa dovete fare:

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"; 

che sarà in uscita:

<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. Grazie BoZ. Questo sembra qualcosa che sarebbe un problema comune, ma non sono stato in grado di trovare nulla su di esso. Questa correzione dovrebbe funzionare correttamente. Grazie ancora. – Brian

+5

contento che ti sia piaciuto. Spero sia la migliore risposta che puoi trovare. –

+0

+1 Bello! molto più veloce di una regexp – Tech4Wilco

Problemi correlati