【问题标题】:Check if word exists in img alt tag检查img alt标签中是否存在单词
【发布时间】:2015-05-19 20:08:25
【问题描述】:

我一直在寻找这样的脚本,但还没有找到任何匹配项。

我知道你们在这里,跳出框框思考,所以我问你。

我想(使用 PHP)检查字符串中的 标记是否在其 alt 标记中包含特定单词。例如,如果我正在寻找单词 gem 而我的字符串是:

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

它应该只告诉我我有一个真正的匹配,因为 gem 在我的 alt 标签中,因此是一个匹配。错误匹配是:

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

因为我在 alt 标签中寻找 gem 一词。 希望有人能帮帮我。

【问题讨论】:

  • 你想要的输出是什么?
  • 使用DOMDocument-&gt;getAttribute + strpos
  • @Ghost 和 strpos,“gem”和“gems”都会匹配。最好使用带有单词边界的正则表达式。
  • @TomFenech 是的,可能在属性值本身上使用正则表达式是可以的

标签: php image tags match alt


【解决方案1】:

试试看:

$var_string = your html img code;

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

【讨论】:

  • 这没有回答 OP 的问题 - 他只想在 alt 标签内搜索,而不是整个字符串。
  • 大量回答,他是对的。这有点棘手。
【解决方案2】:

要详细说明 cmets 中的 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 并循环遍历每个 &lt;img&gt; 元素。它使用带有单词边界\b 的正则表达式来匹配单词“gem”的出现。

输出:

This is my gem

【讨论】:

  • 这很好用!但是把我的字符串作为匹配词有点麻烦,你能帮帮我吗? $dom = new DOMDocument(); $dom-&gt;loadHTML($row['content']); foreach ($dom-&gt;getElementsByTagName('img') as $img) { if (preg_match('\\b' + $row_meta['keyword'] + '\\b', $img-&gt;getAttribute('alt'))) { $counter++; } }
  • @Jonas 我已经编辑了我的答案,希望它现在能达到你想要的效果。
  • 我无法完全使用它:if (preg_match('/\b".$row_meta[keyword]."\b/', $alt)) {
  • @Jonas 不知道$row_meta['keyword'] 是什么,很难说为什么。顺便说一句,你应该总是引用你的数组键。
  • $row_meta['keyword'] 是我的数据库输出中的一个词。现在它包含 test 并且我有 3 张带有 alt 测试的图片。 With if (preg_match('/\b$key\b/', $alt)) { 它不起作用,但如果我将 $key 替换为只是测试它会很好。问题是 $key 可以在数据库中更改,因此我不能只输入一个特定的单词,而是需要它作为我的字符串
【解决方案3】:

我想出了类似的东西

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

可能会起作用,但是当我尝试打印出 $match[1] 时,我只得到文本“array”

【讨论】:

  • 你应该编辑你的问题而不是把它作为答案发布,或者完全解决它并编辑这篇文章
猜你喜欢
  • 1970-01-01
  • 2013-01-11
  • 2013-05-24
  • 1970-01-01
  • 2017-12-11
  • 2011-04-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多