Извлечение источников изображения из текста в PHP - preg_match_all требуется - PullRequest
2 голосов
/ 24 февраля 2011

У меня небольшая проблема, так как мой preg_match_all не работает должным образом.

я хочу извлечь параметр src из всех изображений в post_content из wordpress, который является строкой, а не полным html-документом / DOM (таким образом, нельзя использовать функцию синтаксического анализа документа)

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

preg_match_all( '/src="([^"]*)"/', $search->post_content, $matches);

if ( isset( $matches ) )
{  

foreach ($matches as $match) 
{

if(strpos($match[0], "src")!==false)
{
$res = explode("\"", $match[0]);
echo $res[1];
}

}

}

Может кто-нибудь, пожалуйста, помогите здесь ...

Ответы [ 2 ]

8 голосов
/ 24 февраля 2011

Использование регулярных выражений для анализа HTML-документа может быть очень подвержено ошибкам.Как и в вашем случае, когда не только IMG элементы имеют атрибут SRC (на самом деле это даже не обязательно должен быть атрибут HTML).Кроме того, также возможно, что значение атрибута не заключено в двойные кавычки.

Лучше использовать HTML-анализатор DOM, например PHP * DOMDocument и его методы:

$doc = new DOMDocument();
$doc->loadHTML($search->post_content);
foreach ($doc->getElementsByTagName('img') as $img) {
    if ($img->hasAttribute('src')) {
        echo $img->getAttribute('src');
    }
}
0 голосов
/ 24 февраля 2011

Вы можете использовать синтаксический анализатор DOM со строками HTML, нет необходимости иметь полный HTML-документ.http://simplehtmldom.sourceforge.net/

...