Algoritmo de detección de URL con php-regex

I wanted to implement a url matching algorithm that detects every url which starts with http or https. I come up with a solution but I am not sure whether it is enough to consider only spaces and control characters

function func($str){
    $url = '/((http|https)[^[:space:][:cntrl:]]+)/i';
    $str = nl2br(htmlspecialchars($str));
    return preg_replace($url, '<a href="$1" target="_blank">$1</a>', $str);
}

preguntado el 01 de febrero de 12 a las 03:02

¡Google es tu amigo! regexlib.com/… You should use it more often :) -

posible duplicado de PHP regex para validar una URL -

1 Respuestas

Algo como esto:


function url_link($str) {
    if (preg_match_all("#(^|\s|\()((http(s?)://)|(www\.))(\w+[^\s\)\<]+)#i", $str, $matches)) {
        $target = " target=\"_blank\" ";

        for ($i = 0; $i < count($matches['0']); $i++) {
            $period = '';
            if (preg_match("|\.$|", $matches['6'][$i])) {
                $period = '.';
                $matches['6'][$i] = substr($matches['6'][$i], 0, -1);
            }

            $str = str_replace($matches['0'][$i], $matches['1'][$i] . '<a href="http' .
                    $matches['4'][$i] . '://' .
                    $matches['5'][$i] .
                    $matches['6'][$i] . '"' . $target . '>http' .
                    $matches['4'][$i] . '://' .
                    $matches['5'][$i] .
                    $matches['6'][$i] . '</a>' .
                    $period, $str);
        }
    }
    return $str;
}

Espero eso ayude

Respondido 01 Feb 12, 08:02

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.