]> scripts.mit.edu Git - autoinstallsdev/mediawiki.git/blobdiff - vendor/wikimedia/remex-html/RemexHtml/DOM/DOMUtils.php
MediaWiki 1.30.2
[autoinstallsdev/mediawiki.git] / vendor / wikimedia / remex-html / RemexHtml / DOM / DOMUtils.php
diff --git a/vendor/wikimedia/remex-html/RemexHtml/DOM/DOMUtils.php b/vendor/wikimedia/remex-html/RemexHtml/DOM/DOMUtils.php
new file mode 100644 (file)
index 0000000..46dea19
--- /dev/null
@@ -0,0 +1,39 @@
+<?php
+
+namespace RemexHtml\DOM;
+use RemexHtml\HTMLData;
+
+class DOMUtils {
+       /**
+        * Replace unsupported characters with a code of the form U123456.
+        *
+        * @param string $name
+        * @return string
+        */
+       public static function coerceName( $name ) {
+               $coercedName =
+                       mb_encode_numericentity( mb_substr( $name, 0, 1, 'UTF-8' ),
+                               HTMLData::$nameStartCharConvTable, 'UTF-8', true ) .
+                       mb_encode_numericentity( mb_substr( $name, 1, null, 'UTF-8' ),
+                               HTMLData::$nameCharConvTable, 'UTF-8', true );
+               $coercedName = preg_replace_callback( '/&#x([0-9A-F]*);/',
+                       function ( $m ) {
+                               return 'U' . str_pad( $m[1], 6, '0', STR_PAD_LEFT );
+                       },
+                       $coercedName );
+               return $coercedName;
+       }
+
+       /**
+        * Invert the encoding produced by coerceName()
+        *
+        * @param string $name
+        * @return string
+        */
+       public static function uncoerceName( $name ) {
+               return mb_decode_numericentity(
+                       preg_replace( '/U([0-9A-F]{6})/', '&#x\1;', $name ),
+                       [ 0, 0x10ffff, 0, 0xffffff ],
+                       'UTF-8' );
+       }
+}