анализировать содержание и извлекать ссылки и изображения в php - PullRequest
1 голос
/ 01 марта 2011

вы, возможно, видели, как Facebook анализирует контент и извлекает ссылки, изображения и видео

когда мы вставляем что-то вроде этого

this is an example text which is linked linke this   http://stackoverflow.com/questions/ask
and i like it so much like this picture     http://stackoverflow.com/img.png

меняется на это

    this is an example text which is linked linke this   
<a href='http://stackoverflow.com/questions/ask'>
    and i like it so much like this picture   
 <img src='http://stackoverflow.com/img.png'>

Теперь я хочу сделать то же самое, проанализировать мой контент и создать обогащенный контент.

как я могу сделать такую ​​вещь в php? есть ли какой-нибудь класс, готовый к этому?

Ответы [ 2 ]

1 голос
/ 01 марта 2011

Это две функции, которые работают должным образом и протестированы мной.

function isImage($url) {
    if (substr($url, 0, 7) == 'http://') {
        $i = str_ireplace('http://', '', $url); // delete first part
        $i = explode('/', $i); // divide link into parts
        $end = end($i); // get the last part
        $ex = explode('.', $end); // get the extension if exists so for 'image.jpg' $ex = jpg
        if (count($ex) === 2) {
            $allowed = array('jpg', 'jpeg', 'png', 'gif'); // allowed image extensions
            foreach ($allowed as $a) {
                if ($ex = $a) {
                    # Is an image
                    return true;
                }
            }
        } else {
            # It's an url
            return false;
        }
    } else {
        # It's not even a link
        return false;
    }
}

function isLink($url) {
    if (substr($url, 0, 7) == 'http://') {
        $i = str_ireplace('http://', '', $url); // delete first part
        $i = explode('/', $url); // divide link into parts
        $end = end($i); // get the last part
        $ex = explode('.', $end); // get the extension if exists so for 'image.jpg' $ex = jpg
        return (count($ex) == 0) ? true : false;
    } else {
        # It's not even a link
        return false;
    }
}

$image = isImage($input); // true
$link = isLink($input); // false
var_dump($image, $link);

Примеры (isLink()):

Примеры (isImage()):

(*) = Это потому, что он проверяет, имеет ли ссылка префикс http://.Если вы не хотите, чтобы это произошло, вот функции:

function isImage($url) {
    $i = explode('/', $i); // divide link into parts
    $end = end($i); // get the last part
    $ex = explode('.', $end); // get the extension if exists so for 'image.jpg' $ex = jpg
    if (count($ex) === 2) {
        $allowed = array('jpg', 'jpeg', 'png', 'gif'); // allowed image extensions
        foreach ($allowed as $a) {
            if ($ex = $a) {
                # Is an image
                return true;
            }
        }
    } else {
        # It's an url
        return false;
    }
}

function isLink($url) {
    $i = explode('/', $url); // divide link into parts
    $end = end($i); // get the last part
    $ex = explode('.', $end); // get the extension if exists so for 'image.jpg' $ex = jpg
    return (count($ex) == 0) ? true : false;
}

И затем вы можете использовать его как:

if (isLink($url)) { echo "<a href=\"$url\">$url</a>"; }
if (isImage($url)) { echo "<img src=\"$url\" alt=\"image\">"; }
0 голосов
/ 01 марта 2011

Вы можете использовать preg_replace с правильным регулярным выражением, чтобы заменить соответствующий шаблон и добавить теги HTML.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...