feeds_ex-8.x-1.0-alpha4/src/Utility/XmlUtility.php
src/Utility/XmlUtility.php
<?php
namespace Drupal\feeds_ex\Utility;
use Drupal\Core\StringTranslation\StringTranslationTrait;
/**
* Simple XML helpers.
*/
class XmlUtility {
use StringTranslationTrait;
/**
* Creates an HTML document.
*
* @param string $source
* The string containing the HTML.
* @param int $options
* (optional) Bitwise OR of the libxml option constants. Defaults to 0.
*
* @return \DOMDocument
* The newly created DOMDocument.
*
* @throws \RuntimeException
* Thrown if there is a fatal error parsing the XML.
*/
public function createHtmlDocument($source, $options = 0) {
// Fun hack to force parsing as utf-8.
$source = '<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />' . "\n" . $source;
$document = $this->buildDomDocument();
$options |= LIBXML_NONET;
$options |= defined('LIBXML_COMPACT') ? LIBXML_COMPACT : 0;
$options |= defined('LIBXML_PARSEHUGE') ? LIBXML_PARSEHUGE : 0;
$success = $document->loadHTML($source, $options);
if (!$success) {
throw new \RuntimeException('There was an error parsing the HTML document.');
}
return $document;
}
/**
* Converts named HTML entities to their UTF-8 equivalent.
*
* @param string $markup
* The string.
*
* @return string
* The converted string.
*/
public function decodeNamedHtmlEntities($markup) {
$map = array_flip(get_html_translation_table(HTML_ENTITIES, ENT_NOQUOTES | ENT_HTML5, 'UTF-8'));
unset($map['&'], $map['<'], $map['>']);
return strtr($markup, $map);
}
/**
* Builds a DOMDocument setting some default values.
*
* @return \DOMDocument
* A new DOMDocument.
*/
protected function buildDomDocument() {
$document = new \DOMDocument();
$document->strictErrorChecking = FALSE;
$document->resolveExternals = FALSE;
// Libxml specific.
$document->substituteEntities = FALSE;
$document->recover = TRUE;
return $document;
}
}
