парсинг URL в bbcode

Привет, я разрабатываю собственный форум на своем веб-сайте. Я хотел бы преобразовать URL-адреса, начинающиеся с: http: //*.domain.com/photos/ {username} / {photo_id} (я должен получить и имя пользователя, и photo_id), в прямой тег изображения, чтобы вместо этого пользователь получал изображение URL-адреса.

Это должно быть сделано, если они вставляют URL-адрес с или без bbcode:
то есть:
http://domain.com/photos/musthafa/12345
[url = http: //domain.com/photos/musthafa/12345] ссылка на мою фотографию здесь [/ url]
[url = http: //domain.com/photos/musthafa/12345ptinghttp://domain.com/photos/musthafa/12345[/url]

Его нужно преобразовать в ‹тег html-imge src =" url-to_photo-path / photo_id.j_p_g "/>

Я пробовал это:

$str = "http://www.domain.com/photos/musthafa/12345"
$str = preg_replace_callback("'\[url=http:\/\/www\.domain\.com\/photos\/(.*?)\](.*?)\[/url\]'i", 'self::parse_photo_url', $str);

 AND 

   $str = preg_replace_callback("#^https?://([a-z0-9-]+\.)domain.com/photos/(.*?)$#", 'self::parse_gpp_photo', $str);



 function parse_photo_url($url){
{

        $full_url = "http://www.domain.com/" . $url[1];
        $url_segs = parse_url($full_url);
        $path = explode("/", $url_segs['path']);
        return '<img src="http://www.domain.com/{path-to-the-gallery}/'.$path[2].'/jpg" />';
    }

person Musthafa    schedule 04.10.2011    source источник


Ответы (3)


Мустхафа.

Я не уверен, что получил именно то, что вам нужно, но попробуйте следующее:

<?php

$image_url_samples = array(
    "http://domain.com/photos/musthafa/12345",
    "[url=http://domain.com/photos/musthafa/12345]my photo link here[/url]",
    "[url=http://domain.com/photos/musthafa/12345]http://domain.com/photos/musthafa/12345[/url]"
);

foreach ($image_url_samples as $image_url_sample)
{
    $conversion_result = preg_replace("/^(http:\\/\\/domain.com\\/photos\\/\\w+\\/\\d+)$/i",
        "<img src=\"\\1.jpg\" alt=\"\\1\" />", $image_url_sample);
    $conversion_result = preg_replace("/^\\[url=(http:\\/\\/domain.com\\/photos\\/\\w+\\/\\d+)\\](.+)\\[\\/url\\]$/",
        "<img src=\"\\1.jpg\" alt=\"\\2\" />", $conversion_result);
    print $conversion_result . "<br />";
}

Результат:

<img src="http://domain.com/photos/musthafa/12345.jpg" alt="http://domain.com/photos/musthafa/12345" />
<br />
<img src="http://domain.com/photos/musthafa/12345.jpg" alt="my photo link here" />
<br />
<img src="http://domain.com/photos/musthafa/12345.jpg" alt="http://domain.com/photos/musthafa/12345" />
<br />

Кстати, если вы хотите сделать свой URL-адрес нечувствительным к регистру, добавьте модификатор i в конец обычного шаблона (Модификаторы шаблона PHP).

person ezze    schedule 04.10.2011

В основном я хотел бы извлечь идентификатор (12345 в этом примере), и мне нужно извлечь прямую ссылку на URL-адрес изображения, чтобы пользователь получил тег изображения вместо URL-адреса.

Вот почему я позвонил

preg_replace_callback function. 

Проще говоря, я застрял в шаблоне регулярного выражения, чтобы соответствовать URL-адресу моего домена, начиная с:

http://domain.com/photos{username}/{id} 
OR
http://www.domain.com/photos{username}/{id}" 
person Musthafa    schedule 05.10.2011

Вам не нужно регулярное выражение.

function buildLink( $id, $name ){

  $html   = array();
  $html[] = '<img alt="" src="http://www.domain.com/photos/';
  $html[] = $name;
  $html[] = '/';
  $html[] = $id;
  $html[] = '.jpg">';

  return implode( '', $html );

}

$path       = 'http://www.domain.com/photos/musthafa/12345';
$path       = rtrim( $path, ' /' );
$path_parts = explode( '/', $path );
$id         = ( int ) array_pop( $path_parts );
$name       = array_pop( $path_parts );
$img        = buildLink( $id, $name );
echo $img;
person user2429266    schedule 13.04.2014