summaryrefslogtreecommitdiff
path: root/www/wiki/extensions/SemanticMediaWiki/src/Exporter/Escaper.php
diff options
context:
space:
mode:
Diffstat (limited to 'www/wiki/extensions/SemanticMediaWiki/src/Exporter/Escaper.php')
-rw-r--r--www/wiki/extensions/SemanticMediaWiki/src/Exporter/Escaper.php99
1 files changed, 99 insertions, 0 deletions
diff --git a/www/wiki/extensions/SemanticMediaWiki/src/Exporter/Escaper.php b/www/wiki/extensions/SemanticMediaWiki/src/Exporter/Escaper.php
new file mode 100644
index 00000000..ffbe97f9
--- /dev/null
+++ b/www/wiki/extensions/SemanticMediaWiki/src/Exporter/Escaper.php
@@ -0,0 +1,99 @@
+<?php
+
+namespace SMW\Exporter;
+
+use SMW\DIWikiPage;
+
+/**
+ * @license GNU GPL v2+
+ * @since 2.2
+ *
+ * @author Markus Krötzsch
+ */
+class Escaper {
+
+ /**
+ * @since 2.2
+ *
+ * @param DIWikiPage $diWikiPage
+ *
+ * @return string
+ */
+ static public function encodePage( DIWikiPage $diWikiPage ) {
+
+ $localName = '';
+
+ if ( $diWikiPage->getInterwiki() !== '' ) {
+ $localName = $diWikiPage->getInterwiki() . ':';
+ }
+
+ if ( $diWikiPage->getNamespace() === SMW_NS_PROPERTY ) {
+ $localName .= 'Property' . ':' . $diWikiPage->getDBkey();
+ } elseif ( $diWikiPage->getNamespace() === NS_CATEGORY ) {
+ $localName .= 'Category' . ':' . $diWikiPage->getDBkey();
+ } elseif ( $diWikiPage->getNamespace() !== NS_MAIN ) {
+ $localName .= str_replace( ' ', '_', $GLOBALS['wgContLang']->getNSText( $diWikiPage->getNamespace() ) ) . ':' . $diWikiPage->getDBkey();
+ } else {
+ $localName .= $diWikiPage->getDBkey();
+ }
+
+ return self::encodeUri( $localName );
+ }
+
+ /**
+ * @param string
+ *
+ * @return string
+ */
+ static public function armorChars( $string ) {
+ return str_replace( [ '/' ], [ '-2F' ], $string );
+ }
+
+ /**
+ * This function escapes symbols that might be problematic in XML in a uniform
+ * and injective way.
+ *
+ * @param string
+ *
+ * @return string
+ */
+ static public function encodeUri( $uri ) {
+
+ $uri = $GLOBALS['smwgExportResourcesAsIri'] ? $uri : wfUrlencode( $uri );
+
+ $uri = str_replace(
+ [ '-', ' ' ],
+ [ '-2D', '_' ],
+ $uri
+ );
+
+ $uri = str_replace(
+ [ '*', ',' , ';', '<', '>', '(', ')', '[', ']', '{', '}', '\\', '$', '^', ':', '"', '#', '&', "'", '+', '!', '%' ],
+ [ '-2A', '-2C', '-3B', '-3C', '-3E', '-28', '-29', '-5B', '-5D', '-7B', '-7D', '-5C', '-24', '-5E', '-3A', '-22', '-23', '-26', '-27', '-2B', '-21', '-' ],
+ $uri
+ );
+
+ return $uri;
+ }
+
+ /**
+ * This function unescapes URIs generated with Escaper::decodeUri.
+ *
+ * @param string
+ *
+ * @return string
+ */
+ static public function decodeUri( $uri ) {
+
+ $uri = str_replace(
+ [ '-2A', '-2C', '-3B', '-3C', '-3E', '-28', '-29', '-5B', '-5D', '-7B', '-7D', '-5C', '-24', '-5E', '-3A', '-22', '-23', '-26', '-27', '-2B', '-21', '-25', '-' ],
+ [ '*', ',' , ';', '<', '>', '(', ')', '[', ']', '{', '}', '\\', '$', '^', ':', '"', '#', '&', "'", '+', '!', '%', '%' ],
+ $uri
+ );
+
+ $uri = str_replace( '%2D', '-', $uri );
+
+ return $uri;
+ }
+
+}