php 替换标记上的空alt标记< img>

e5njpo68  于 12个月前  发布在  PHP
关注(0)|答案(5)|浏览(105)

我想在字符串中替换图像上的空alt标签。我有一个字符串,其中包含窗帘页面的所有文本。在文本中也有图像,其中很多都有空标签(旧数据),但大多数时候它们都有标题标签。例如:<img src="assets/img/test.png" alt="" title="I'am a title tag" width="100" height="100" />
我想要的:<img src="assets/img/test.png" alt="" title="I'am a title tag" alt="I'am a title tag" width="100" height="100" />
于是:我需要找到字符串中的所有图像,循环遍历图像,找到标题标签,找到alt标签,并将空的alt标签替换为有值的标题标签。
这就是我所尝试的:

preg_match_all('/<img[^>]+>/i',$return, $text);
if(isset($text)) {
            foreach( $text as $itemImg ) {
                foreach( $itemImg as $item ) {
                    $array = array();
                    preg_match( '/title="([^"]*)"/i', $item, $array );
                    if(isset($array[1])) {
                        //So $array[1] is a title tag, now what?
                    }
                }

            }
        }

字符串
我不知道有没有完成的代码,我认为必须有一个更容易解决这个问题。建议?

fsi0uk1n

fsi0uk1n1#

使用Regex不是一个好方法,你应该使用DOMDocument来解析HTML。这里我们查询那些alt属性为空的元素,这实际上是有问题的。
Try this code snippet here

<?php

ini_set('display_errors', 1);

$string=<<<HTML
<img src="assets/img/test1.png" alt="" title="I'am a title tag" width="100" height="100" />
<img src="assets/img/test2.png" alt="" title="I'am a title tag" width="100" height="100" />
<img src="assets/img/test3.png" alt="" title="I'am a title tag" width="100" height="100" /> 
HTML;

$domDocument = new DOMDocument();
$domDocument->loadHTML($string,LIBXML_HTML_NODEFDTD);

$domXPath = new DOMXPath($domDocument);
$results = $domXPath->query('//img[@alt=""]');
foreach($results as $result)
{
    $title=$result->getAttribute("title");
    $result->setAttribute("alt",$title);
    echo $domDocument->saveHTML($result);
    echo PHP_EOL;
}

字符串

u0sqgete

u0sqgete2#

也许你可以使用JavaScript和jquery来做这类事情,比如:

$('img').each(function(){
    $(this).attr('alt', $(this).attr('title'));
});

字符串
希望它能帮助
祝你好运

y53ybaqx

y53ybaqx3#

这里需要的是一个HTML解析器库,它可以操作HTML,然后再次保存它。
PHP中内置的DOM模块提供了以下功能:http://php.net/manual/en/book.dom.php
下面是一个例子(摘自this article):

$dom = new DOMDocument;
$dom->loadHTML($html);
$images = $dom->getElementsByTagName('img');
foreach ($images as $image) {
        $image->setAttribute('src', 'http://example.com/' . $image->getAttribute('src'));
}
$html = $dom->saveHTML();

字符串

pxq42qpu

pxq42qpu4#

您可以使用DOMDocument来实现您的要求。下面是其中一个示例代码供您参考:

<?php
$html = '<a href="http://example.com" rel="nofollow external">test</a>';
$dom = new DOMDocument;
$dom->loadHTML($html);
$xpath = new DOMXPath($dom);
$nodes = $xpath->query("//a[contains(concat(' ', normalize-space(@rel), ' '), ' external ')]");
foreach($nodes as $node) {
    $node->setAttribute('href', 'http://example.org');
}

?>

字符串

r1zk6ea1

r1zk6ea15#

请在下面试试:

function img_title_in_alt($full_img_tag){

    $doc = new DOMDocument();
    $doc->loadHTML($full_img_tag);
    $imageTags = $doc->getElementsByTagName('img');

    foreach($imageTags as $tag) {

        if($tag->getAttribute('src')!==''){
            return '<img src="'.$tag->getAttribute('src').'" width="'.$tag->getAttribute('width').'" height="'.$tag->getAttribute('height').'" alt="'.$tag->getAttribute('title').'" title="'.$tag->getAttribute('title').'" />';
        }
    }
}

字符串
现在用你的完整html标签image调用函数。看例子:

$image = '<img src="assets/img/test.png" alt="" title="I\'am a title tag" width="100" height="100" />';

print img_title_in_alt($image);

相关问题