prefer not to use utf8_encode and utf8_decode
authorgggeek <giunta.gaetano@gmail.com>
Mon, 12 Dec 2022 11:22:09 +0000 (11:22 +0000)
committergggeek <giunta.gaetano@gmail.com>
Mon, 12 Dec 2022 11:22:09 +0000 (11:22 +0000)
src/Encoder.php
src/Helper/Charset.php
src/Request.php
src/Server.php
tests/0CharsetTest.php
tests/2MessageTest.php
tests/5ServerTest.php

index 9b1d2ce..e7a6bc0 100644 (file)
@@ -304,11 +304,11 @@ class Encoder
             // The following code might be better for mb_string enabled installs, but makes the lib about 200% slower...
             //if (!is_valid_charset($valEncoding, array('UTF-8'))
             if (!in_array($valEncoding, array('UTF-8', 'US-ASCII')) && !XMLParser::hasEncoding($xmlVal)) {
-                if ($valEncoding == 'ISO-8859-1') {
-                    $xmlVal = utf8_encode($xmlVal);
+                if (extension_loaded('mbstring')) {
+                    $xmlVal = mb_convert_encoding($xmlVal, 'UTF-8', $valEncoding);
                 } else {
-                    if (extension_loaded('mbstring')) {
-                        $xmlVal = mb_convert_encoding($xmlVal, 'UTF-8', $valEncoding);
+                    if ($valEncoding == 'ISO-8859-1') {
+                        $xmlVal = utf8_encode($xmlVal);
                     } else {
                         $this->getLogger()->errorLog('XML-RPC: ' . __METHOD__ . ': invalid charset encoding of xml text: ' . $valEncoding);
                     }
index 45cb3d3..820d85b 100644 (file)
@@ -235,6 +235,7 @@ class Charset
 
             case 'ISO-8859-1_UTF-8':
                 $escapedData = str_replace(array('&', '"', "'", '<', '>'), array('&amp;', '&quot;', '&apos;', '&lt;', '&gt;'), $data);
+                /// @todo if on php >= 8.2, prefer using mbstring or iconv
                 $escapedData = utf8_encode($escapedData);
                 break;
 
index 7eb124f..c946bda 100644 (file)
@@ -309,12 +309,11 @@ class Request
             // The following code might be better for mb_string enabled installs, but makes the lib about 200% slower...
             //if (!is_valid_charset($respEncoding, array('UTF-8')))
             if (!in_array($respEncoding, array('UTF-8', 'US-ASCII')) && !XMLParser::hasEncoding($data)) {
-                if ($respEncoding == 'ISO-8859-1') {
-                    $data = utf8_encode($data);
+                if (extension_loaded('mbstring')) {
+                    $data = mb_convert_encoding($data, 'UTF-8', $respEncoding);
                 } else {
-
-                    if (extension_loaded('mbstring')) {
-                        $data = mb_convert_encoding($data, 'UTF-8', $respEncoding);
+                    if ($respEncoding == 'ISO-8859-1') {
+                        $data = utf8_encode($data);
                     } else {
                         $this->getLogger()->errorLog('XML-RPC: ' . __METHOD__ . ': invalid charset encoding of received response: ' . $respEncoding);
                     }
index 6c24b0a..587fa41 100644 (file)
@@ -558,11 +558,11 @@ class Server
             // makes the lib about 200% slower...
             //if (!is_valid_charset($reqEncoding, array('UTF-8')))
             if (!in_array($reqEncoding, array('UTF-8', 'US-ASCII')) && !XMLParser::hasEncoding($data)) {
-                if ($reqEncoding == 'ISO-8859-1') {
-                    $data = utf8_encode($data);
+                if (extension_loaded('mbstring')) {
+                    $data = mb_convert_encoding($data, 'UTF-8', $reqEncoding);
                 } else {
-                    if (extension_loaded('mbstring')) {
-                        $data = mb_convert_encoding($data, 'UTF-8', $reqEncoding);
+                    if ($reqEncoding == 'ISO-8859-1') {
+                        $data = utf8_encode($data);
                     } else {
                         $this->getLogger()->errorLog('XML-RPC: ' . __METHOD__ . ': invalid charset encoding of received request: ' . $reqEncoding);
                     }
index a578911..7e5c006 100644 (file)
@@ -67,7 +67,8 @@ class CharsetTest extends PhpXmlRpc_PolyfillTestCase
             mb_detect_encoding($this->latinString, 'ISO-8859-1, UTF-8, WINDOWS-1251, ASCII', true),
             'Setup latinString is not ISO-8859-1 encoded...'
         );*/
-        $string = utf8_encode($this->latinString);
+        // the warning suppression is due to utf8_encode being deprecated in php 8.2
+        $string = @utf8_encode($this->latinString);
         $encoded = $this->utf8ToLatin1($string);
         $this->assertEquals(str_replace(array('&', '"', "'", '<', '>'), array('&amp;', '&quot;', '&apos;', '&lt;', '&gt;'), $this->latinString), $encoded);
     }
@@ -76,7 +77,8 @@ class CharsetTest extends PhpXmlRpc_PolyfillTestCase
     {
         $string = 'a.b.c.å.ä.ö.€.';
         $encoded = $this->utf8ToLatin1($string);
-        $this->assertEquals(utf8_decode('a.b.c.å.ä.ö.&#8364;.'), $encoded);
+        // the warning suppression is due to utf8_decode being deprecated in php 8.2
+        $this->assertEquals(@utf8_decode('a.b.c.å.ä.ö.&#8364;.'), $encoded);
     }
 
     public function testUtf8ToLatin1Runes()
index bb7461a..4f76804 100644 (file)
@@ -145,7 +145,8 @@ class MessageTests extends PhpXmlRpc_PolyfillTestCase
 
     public function testUnicodeInErrorString()
     {
-        $response = utf8_encode(
+        // the warning suppression is due to utf8_decode being deprecated in php 8.2
+        $response = @utf8_encode(
             '<?xml version="1.0"?>
 <!-- $Id -->
 <!-- found by G. Giunta, covers what happens when lib receives UTF8 chars in response text and comments -->
@@ -413,7 +414,7 @@ and there they were.</value></member><member><name>postid</name><value>7414222</
 
         $s = $this->newMsg('dummy');
         $f = "HTTP/1.1 200 OK\r\nContent-type: text/xml; charset=UTF-8\r\n\r\n" . '<?xml version="1.0"?><methodResponse><params><param><value><struct><member><name>userid</name><value>311127</value></member>
-<member><name>dateCreated</name><value><dateTime.iso8601>20011126T09:17:52</dateTime.iso8601></value></member><member><name>content</name><value>' . utf8_encode($string) . '</value></member><member><name>postid</name><value>7414222</value></member></struct></value></param></params></methodResponse>
+<member><name>dateCreated</name><value><dateTime.iso8601>20011126T09:17:52</dateTime.iso8601></value></member><member><name>content</name><value>' . @utf8_encode($string) . '</value></member><member><name>postid</name><value>7414222</value></member></struct></value></param></params></methodResponse>
 ';
         $r = $s->parseResponse($f, false, 'phpvals');
         $v = $r->value();
@@ -421,7 +422,7 @@ and there they were.</value></member><member><name>postid</name><value>7414222</
         $this->assertEquals($string, $v);
 
         $f = '<?xml version="1.0" encoding="UTF-8"?><methodResponse><params><param><value><struct><member><name>userid</name><value>311127</value></member>
-<member><name>dateCreated</name><value><dateTime.iso8601>20011126T09:17:52</dateTime.iso8601></value></member><member><name>content</name><value>' . utf8_encode($string) . '</value></member><member><name>postid</name><value>7414222</value></member></struct></value></param></params></methodResponse>
+<member><name>dateCreated</name><value><dateTime.iso8601>20011126T09:17:52</dateTime.iso8601></value></member><member><name>content</name><value>' . @utf8_encode($string) . '</value></member><member><name>postid</name><value>7414222</value></member></struct></value></param></params></methodResponse>
 ';
         $r = $s->parseResponse($f, false, 'phpvals');
         $v = $r->value();
index f91b41a..cf164ef 100644 (file)
@@ -283,7 +283,8 @@ class ServerTest extends PhpXmlRpc_PolyfillTestCase
             $this->markTestSkipped('Miss mbstring extension to test exotic charsets');
             return;
         }
-        $sendString = utf8_decode('élève');
+        // the warning suppression is due to utf8_decode being deprecated in php 8.2
+        $sendString = @utf8_decode('élève');
         $str = '<?xml version="1.0"?>
 <methodCall>
     <methodName>examples.stringecho</methodName>