File "Encoder.php"
Full Path: /home/aiclgcwq/photonindustriespvt.com/wp-content/plugins/tenweb-speed-optimizer/vendor/imangazaliev/didom/src/DiDom/Encoder.php
File size: 1.85 KB
MIME-type: text/x-php
Charset: utf-8
<?php
declare(strict_types=1);
namespace DiDom;
class Encoder
{
/**
* @param string $string
* @param string $encoding
*
* @return string
*/
public static function convertToHtmlEntities(string $string, string $encoding): string
{
// handling HTML entities via mbstring is deprecated in PHP 8.2
if (function_exists('mb_convert_encoding') && PHP_VERSION_ID < 80200) {
return mb_convert_encoding($string, 'HTML-ENTITIES', $encoding);
}
if ('UTF-8' !== $encoding) {
$string = iconv($encoding, 'UTF-8//IGNORE', $string);
}
return preg_replace_callback('/[\x80-\xFF]+/', [__CLASS__, 'htmlEncodingCallback'], $string);
}
/**
* @param string[] $matches
*
* @return string
*/
private static function htmlEncodingCallback(array $matches): string
{
$characterIndex = 1;
$entities = '';
$codes = unpack('C*', htmlentities($matches[0], ENT_COMPAT, 'UTF-8'));
while (isset($codes[$characterIndex])) {
if (0x80 > $codes[$characterIndex]) {
$entities .= chr($codes[$characterIndex++]);
continue;
}
if (0xF0 <= $codes[$characterIndex]) {
$code = (($codes[$characterIndex++] - 0xF0) << 18) + (($codes[$characterIndex++] - 0x80) << 12) + (($codes[$characterIndex++] - 0x80) << 6) + $codes[$characterIndex++] - 0x80;
} elseif (0xE0 <= $codes[$characterIndex]) {
$code = (($codes[$characterIndex++] - 0xE0) << 12) + (($codes[$characterIndex++] - 0x80) << 6) + $codes[$characterIndex++] - 0x80;
} else {
$code = (($codes[$characterIndex++] - 0xC0) << 6) + $codes[$characterIndex++] - 0x80;
}
$entities .= '&#' . $code . ';';
}
return $entities;
}
}