2017-06-07 16 views
1

空のaltタグを文字列の画像に置き換えます。私は、カーテンページのすべてのテキストを含む文字列を持っています。テキストにはイメージもあり、その多くに空のタグ(古いデータ)がありますが、ほとんどの場合、タイトルタグがあります。たとえば :私が持っていることを望む何 <img src="assets/img/test.png" alt="" title="I'am a title tag" width="100" height="100" />空のaltタグを<img>タグに置き換えます。

<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タグを値を持つtitleタグに置き換えます。

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? 
        } 
       } 

      } 
     } 

私は、コードを完了する必要が分からない、と私はこのために簡単に修正がなければならないと思う:

これは私が試したものです。提案?

答えて

1

あなたがHTMLを解析するためDOMDocumentを使用する必要があります良い方法ではありません。ここでは、実際に質問されている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; 
} 
2

多分あなたは次のようにjqueryの で物事のこの種のためにJavascriptを使用することができます

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

は、それが

よろしくに役立ちます願っています。

+1

驚くほど洗練されたソリューション! – delboy1978uk

+0

OPではブラウザ上でこれを実行時に変更したいのではなく、すでに存在するHTMLソースファイルを更新したいと思うようには聞こえませんでした。 –

+0

それは私が探しているものではありませんが、私は解決策が好きです;) – Ruub

2

ここで必要なのは、HTMLを操作して再度保存できるHTMLパーサーライブラリです。正規表現を使用してHTMLマークアップを変更することで、あなたは混乱の兆しを見せています。

PHPに組み込まれたDOMモジュールは、この機能を提供しています:http://php.net/manual/en/book.dom.php

ここで例(this articleからcribbed)です:

$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(); 
+0

これはPHPであればこれも方法です! – delboy1978uk

0

あなたはあなたの条件を達成するためにDOMDocumentを使用することができます。以下は参照用のサンプル・コードのいずれかです。Regexを使用して

<?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'); 
} 

?> 
0

以下のことを試してください:

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 = '<img src="assets/img/test.png" alt="" title="I\'am a title tag" width="100" height="100" />'; 

print img_title_in_alt($image); 

わかりません。

関連する問題