2015-03-17 7 views
1

Я искал сценарий, подобный этому, но пока не смог найти совпадения.Проверьте, существует ли слово в теге img alt

Я знаю вас, ребята, подумайте из коробки, поэтому я вас спрашиваю.

Я хочу (с PHP) проверить, если теги в строке содержат определенное слово в их теге alt. Например, если я ищу слово драгоценный камень и моя строка:

I have a gem <img src="whatever.jpg" alt="This is my gem"> ye well it is. 

Он должен сказать мне, только у меня есть настоящий матч, потому что драгоценный камень в мой альт тег, и поэтому матч. Подлинный матч будет:

I have a gem <img src="whatever.jpg" alt="This is my gems"> ye well it is. 

Потому что я ищу слово gem в теге alt. Надеюсь, кто-то может мне помочь.

+0

Каков ваш желаемый результат? –

+4

использовать 'DOMDocument'' -> getAttribute' + 'strpos' – Ghost

+1

Вы можете использовать regex – starkeen

ответ

1

Чтобы уточнить Ghost's suggestion в комментариях, вот как вы можете решить вашу проблему, используя DOMDocument класс:

$dom = new DOMDocument(); 
$dom->loadHTML('I have a gem <img src="whatever.jpg" alt="This is my gem"> ye well it is.'); 
foreach ($dom->getElementsByTagName('img') as $img) { 
    $alt = $img->getAttribute('alt'); 
    if (preg_match('/\bgem\b/', $alt)) { 
     echo "matched: $alt"; 
    } 
} 

Это разбирает строку как HTML и перебирает каждый из <img> элементов. Он использует регулярное выражение с границами слов \b для соответствия вхождениям слова «драгоценный камень».

Выход:

This is my gem 
+0

Это отлично работает! Но имея какую-то неприятность, ставя мою строку в качестве подходящего слова, вы можете мне помочь? '$ dom = new DOMDocument(); $ dom-> loadHTML ($ row ['content']); foreach ($ dom-> getElementsByTagName ('img') как $ img) { if (preg_match ('\\ b' + $ row_meta ['keyword'] + '\\ b', $ img-> getAttribute (' alt '))) { $ counter ++; } } ' –

+1

@Jonas Я отредактировал свой ответ, надеюсь, он делает то, что вы хотите сейчас. –

+0

Я не могу заставить его работать с этим: 'if (preg_match ('/ \ b". $ Row_meta [keyword]. "\ B /', $ alt)) {' –

0

Попробуйте:

$ var_string = ваш HTML-код IMG;

if (strpos($var_string,'gem') !== false) { 
    echo 'true'; 
} 
+1

Это не отвечает на вопрос OP - он только хочет искать внутри тега alt, а не всю строку. –

+0

Как навалом ответил, он прав. Такова сложная часть. –

1

Я понял, что-то вроде

preg_match_all('/<img.*?alt="(.*?)".*>/',$row[content], $match); 

Вероятно, будет работать, но когда я пытаюсь напечатать $ матч [1] я только получить текст "массив"

+0

, вы должны были отредактировать свой вопрос, а не публиковать его в качестве ответа или полностью решить его и отредактировать этот пост – Ghost