Regex & PHP - изолируйте признак src от признака img

С PHP, как я могу изолировать содержание признака src от $foo? Конечный результат, который я ищу, дал бы мне просто «http://example.com/img/image.jpg»

$foo = 'test image';

35
задан Jeff 22 January 2010 в 21:47
поделиться

7 ответов

Если вы не хотите использовать Regex (или любые нестандартные компоненты PHP), разумное решение, использующее встроенный класс Domdocument .

<?php
    $doc = new DOMDocument();
    $doc->loadHTML('<img src="http://example.com/img/image.jpg" ... />');
    $imageTags = $doc->getElementsByTagName('img');

    foreach($imageTags as $tag) {
        echo $tag->getAttribute('src');
    }
?>
70
ответ дан 27 November 2019 в 06:26
поделиться
// Create DOM from string
$html = str_get_html('<img class="foo bar test" title="test image" src="http://example.com/img/image.jpg" alt="test image" width="100" height="100" />');

// echo the src attribute
echo $html->find('img', 0)->src;

http://simplehtmldom.sourceForge.net/

7
ответ дан 27 November 2019 в 06:26
поделиться

Вот то, что я оказался, хотя я Не уверен, насколько это эффективно:

$imgsplit = explode('"',$data);
foreach ($imgsplit as $item) {
    if (strpos($item, 'http') !== FALSE) {
        $image = $item;
        break;
    }
}
1
ответ дан 27 November 2019 в 06:26
поделиться

Я получил этот код:

$dom = new DOMDocument();
$dom->loadHTML($img);
echo $dom->getElementsByTagName('img')->item(0)->getAttribute('src');

Предполагая, что есть только один IMG: P

7
ответ дан 27 November 2019 в 06:26
поделиться

Попробуйте этот шаблон:

'/< \s* img [^\>]* src \s* = \s* [\""\']? ( [^\""\'\s>]* )/'
1
ответ дан 27 November 2019 в 06:26
поделиться

Я не очень уверен, является ли это лучшей практикой или нет, но обычно то, что я люблю делать, это оставить маршруты открытыми для respond_to (т.е. путем добавления .: формат до конца), но использовать его только в контроллерах, когда это необходимо.

Пример:

routes.rb

map.connect :controller/:action/:id.:format

модель _ controller.rb

# Return a collection of model objects
def action_with_multiple_responses
  @models = Model.all

  respond_to do |format|
    format.html #=> action_with_multiple_responses.html
    format.xml  { render :xml => @models }
  end
end

# Return the first model object
def action_with_one_response
  @model = Model.first
end

Это путь, что вы не загромождаете свое действие _ с помощью метода _ one _ response с ненужным блоком, но вы также настроили себя довольно хорошо, если хотите когда-нибудь вернуть свой объект в xml, json и т.д.

-121--4501578-

леса позволит вам построить ваш CSS в концептуальных способах...

-121--2409077-

Эту проблему можно обойти с помощью следующей функции:


function getTextBetween($start, $end, $text)
{
 $start_from = strpos($text, $start);
 $start_pos = $start_from + strlen($start);
 $end_pos = strpos($text, $end, $start_pos + 1);
 $subtext = substr($text, $start_pos, $end_pos);
 return $subtext;
}
$foo = '<img class="foo bar test" title="test image" src="http://example.com/img/image.jpg" alt="test image" width="100" height="100" />';
$img_src = getTextBetween('src="', '"', $foo);
0
ответ дан 27 November 2019 в 06:26
поделиться

Code

<?php
    $foo = '<img class="foo bar test" title="test image" src="http://example.com/img/image.jpg" alt="test image" width="100" height="100" />';
    $array = array();
    preg_match( '/src="([^"]*)"/i', $foo, $array ) ;
    print_r( $array[1] ) ;

Output

http://example.com/img/image.jpg
35
ответ дан 27 November 2019 в 06:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: