public static function transformRootRelativeUrlsToAbsolute($html,
$scheme_and_host) { assert(empty(array_diff(array_keys(parse_url($scheme_and_host)),
["scheme", "host", "port"
])), '$scheme_and_host contains scheme, host and port at most.'
);
assert(isset(parse_url($scheme_and_host)["scheme"
]), '$scheme_and_host is absolute and hence has a scheme.'
);
assert(isset(parse_url($scheme_and_host)["host"
]), '$base_url is absolute and hence has a host.'
);
$html_dom = Html::
load($html);
$xpath =
new \
DOMXpath($html_dom);
// Update all root-relative URLs to absolute URLs in the given HTML.
foreach (static::
$uriAttributes as $attr) { foreach ($xpath->
query("//*[starts-with(@
$attr, '/') and not(starts-with(@
$attr, '//'))]"
) as $node) { $node->
setAttribute($attr,
$scheme_and_host .
$node->
getAttribute($attr));
} foreach ($xpath->
query("//*[@srcset]"
) as $node) { // @see https://html.spec.whatwg.org/multipage/embedded-content.html#attr-img-srcset
// @see https://html.spec.whatwg.org/multipage/embedded-content.html#image-candidate-string
$image_candidate_strings =
explode(',',
$node->
getAttribute('srcset'
));
$image_candidate_strings =
array_map('trim',
$image_candidate_strings);