www_archline_hu/deployed/tflearn/libraries/techfry/src/TfDom.php
LÁZÁR Imre AI Agent bb1c28ae0c feat(deployed): add TF Learn 1.7.5 (no-source, vetted live)
TF Learn (Tech Fry) + techfry library 1.3.4; login-gated, no repo -> deployed files.

Signed-off-by: LÁZÁR Imre <imre@illusion.hu>
Assisted-by: claude-code@claude-opus-4-8
2026-07-16 11:24:46 +02:00

230 lines
5.8 KiB
PHP

<?php
/*
* @package Tech Fry Library
* @license https://www.gnu.org/licenses/gpl-3.0.en.html
*/
namespace TechFry\Library;
defined('_JEXEC') or die;
class TfDom
{
public static function get_dom($html)
{
$html = mb_convert_encoding($html, "HTML-ENTITIES", 'UTF-8');
$dom = new \domDocument;
$dom->preserveWhiteSpace = false;
$dom->loadHTML($html, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
return $dom;
}
// 01. Function to get array of HTML elements
public static function get_html($html, $tag, $attr = null, $attr_value = null)
{
$dom = self::get_dom($html);
$contents = $dom->getElementsByTagName($tag); // Array of Content
if ($contents->length == 0)
{
return false;
}
foreach ($contents as $content)
{
if ($attr != null)
{
if ($content->getAttribute($attr) == $attr_value)
{
$html_arr[] = $dom->saveHtml($content);
}
}
elseif ($attr == null)
{
$html_arr[] = $dom->saveHTML($content);
}
}
return $html_arr;
}
// 02. Function to get array of values
public static function get_value($html, $tag, $attr = null, $attr_value = null)
{
$dom = self::get_dom($html);
$contents = $dom->getElementsByTagName($tag); // Array of Content
if ($contents->length == 0)
{
return false;
}
foreach ($contents as $content)
{
if ($attr != null)
{
if ($content->getAttribute($attr) == $attr_value)
{
$values[] = $content->nodeValue;
}
}
elseif ($attr == null)
{
$values[] = $content->nodeValue;
}
}
return $values;
}
// 03. Function to get array of attribute values
public static function get_attr($html, $tag, $target, $attr = null, $attr_value = null)
{
$dom = self::get_dom($html);
$contents = $dom->getElementsByTagName($tag); // Array of Content
if ($contents->length == 0)
{
return false;
}
foreach ($contents as $content)
{
if ($attr != null)
{
if ($content->getAttribute($attr) == $attr_value)
{
$attr_values[] = $content->getAttribute($target);
}
}
elseif ($attr == null)
{
$attr_values[] = $content->getAttribute($target);
}
}
return $attr_values;
}
// 04. Function to remove all attributes from HTML except some
public static function rem_attr($html, $noremove = array())
{
$dom = self::get_dom($html);
$xpath = new \DOMXPath($dom);
$nodes = $xpath->query('//@*');
foreach ($nodes as $node)
{
if (!in_array($node->nodeName, $noremove))
{
$node->parentNode->removeAttribute($node->nodeName);
}
}
return $dom->saveHTML();
}
// 05. Function to add attribute to specific tag
public static function add_attr($html, $tag, $attr, $attr_value)
{
$dom = self::get_dom($html);
$nodes = $dom->getElementsByTagName($tag);
if (is_array($attr_value))
{
foreach ($nodes as $k => $node)
{
$node->setAttribute($attr, $attr_value[$k]);
}
}
else
{
foreach ($nodes as $node)
{
$node->setAttribute($attr, $attr_value);
}
}
return $dom->saveHTML();
}
// 06. Function to remove complete element
public static function rem_element($html, $tag, $attr = null, $attr_value = null)
{
$dom = self::get_dom($html);
$list = $dom->getElementsByTagName($tag);
for ($i = $list->length; --$i >= 0;)
{
$node = $list->item($i);
if ($attr != null)
{
if ($node->getAttribute($attr) == $attr_value)
{
$node->parentNode->removeChild($node);
}
}
elseif ($attr == null)
{
$node->parentNode->removeChild($node);
}
}
return $dom->saveHTML();
}
// 07. Function to get array of names of unique tags in html
public static function get_tags($html)
{
$dom = self::get_dom($html);
$elements = $dom->getElementsByTagName('*');
$tag_names[] = array();
foreach ($elements as $element)
{
if (!in_array($element->tagName, $tag_names))
{
$tag_names[] = $element->tagName;
}
}
return $tag_names;
}
// 08.
public static function get_html_by_value($html, $tag, $value = '')
{
$dom = self::get_dom($html);
$contents = $dom->getElementsByTagName($tag); // Array of Content
if ($contents->length == 0)
{
return false;
}
foreach ($contents as $content)
{
if (!empty($value))
{
if (strpos($content->nodeValue, $value) !== false)
{
$html_arr[] = $dom->saveHtml($content);
}
}
elseif (empty($value))
{
$html_arr[] = $dom->saveHTML($content);
}
}
return $html_arr;
}
}