HTML Ayrıştırma ve dizeleri değiştirme

0 Cevap php

Ben bir CMS veritabanında saklanan kısmi HTML büyük bir miktar var.

Ben HTML geçmesi ve bir başlık var ve etiketleri içeriğine göre kendilerine bir başlık katmayan herhangi bir <a></a> etiketler bulmak için bir yol arıyorum.

Yani <a href="somepage">some text</a> Ben gibi görünmek için etiketini değiştirmek istiyorsanız olsaydı:

<a title="some text" href="somepage"></a>

Bazı etiketler zaten bir başlık var ve bazı çapa etiketleri aralarında bir şey var.

Şimdiye kadar php ve regex bazı ilerlemeler yapmak için idare ettik.

Ama bu sadece bir 1 ya da 0 ya görüntüler, çapa içeriğini almak mümkün görünmüyor.

<?php
$file = "test.txt";
$handle = fopen("$file", "r");
$theData = fread($handle, filesize($file));
$line = explode("\r\n", $theData);

$regex = '/^.*<a ((?!title).)*$/'; //finds all lines that don't contain an anchor with a title
$regex2 = '/<a .*><\/a>/'; //finds all lines that have nothing between the anchors
$regex3 = '/<a.*?>(.+?)<\/a>/'; //finds the contents of the anchors

foreach ($line as $lines)
{
  if (!preg_match($regex2, $lines) && preg_match($regex, $lines)){
    $tags = $lines;
    $contents = preg_match($regex3, $tags);
    $replaced = str_replace("<a ", "<a title=\"$contents\" ", $lines);
    echo $replaced ."\r\n";
  }
  else {
  echo $lines. "\r\n";
  }
}
?>

Ben regex muhtemelen bu yüzden herhangi bir yardım veya alternatif önerileri büyük takdir HTML ayrıştırmak için en iyi yol değildir anlıyorum.

0 Cevap