From 909bdcc8c9ec2e67980b6a0ba34a24a36fed7540 Mon Sep 17 00:00:00 2001 From: slavo Date: Wed, 13 May 2015 16:58:52 +0200 Subject: [PATCH 1/3] Klarna.php : adding and using method fixMessageEncoding() - fix for problem with (possibly) invalid characters in thrown exception --- Klarna.php | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/Klarna.php b/Klarna.php index effe2d9..3160271 100644 --- a/Klarna.php +++ b/Klarna.php @@ -3666,7 +3666,8 @@ protected function xmlrpc_call($method, $array) $status = $xmlrpcresp->faultCode(); if ($status !== 0) { - throw new KlarnaException($xmlrpcresp->faultString(), $status); + $errorMessage = $this->fixMessageEncoding($xmlrpcresp->faultString()); + throw new KlarnaException($errorMessage, $status); } return php_xmlrpc_decode($xmlrpcresp->value()); @@ -4417,6 +4418,19 @@ private function _checkConfig($config = null) } } + /** + * Fixes originalMessage encoding + * + * @param string $originalMessage + * @return string + */ + private function fixMessageEncoding($originalMessage) + { + $possibleInputEncodings = ['ISO-8859-1', 'UTF-8']; + $outputEncoding = mb_internal_encoding(); + + return mb_convert_encoding($originalMessage, $outputEncoding, $possibleInputEncodings); + } } //End Klarna /** From dc18310940c2a4d3b0a7c3eacb8c840be9077617 Mon Sep 17 00:00:00 2001 From: slavo Date: Wed, 20 May 2015 13:14:01 +0200 Subject: [PATCH 2/3] Private method Klarna::fixMessageEncoding() renamed to _fixMessageEncoding() and updated: support for intl, mbstring and iconv php extensions fallback to ASCII using regular expression possibility to specify input and output encoding as method arguments --- Klarna.php | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/Klarna.php b/Klarna.php index 3160271..7252199 100644 --- a/Klarna.php +++ b/Klarna.php @@ -3666,7 +3666,7 @@ protected function xmlrpc_call($method, $array) $status = $xmlrpcresp->faultCode(); if ($status !== 0) { - $errorMessage = $this->fixMessageEncoding($xmlrpcresp->faultString()); + $errorMessage = $this->_fixMessageEncoding($xmlrpcresp->faultString()); throw new KlarnaException($errorMessage, $status); } @@ -4421,15 +4421,27 @@ private function _checkConfig($config = null) /** * Fixes originalMessage encoding * - * @param string $originalMessage + * @param $originalMessage + * @param string $inputEncoding (defaults to ISO-8859-1) + * @param string $outputEncoding (defaults to UTF-8) * @return string */ - private function fixMessageEncoding($originalMessage) + private function _fixMessageEncoding($originalMessage, $inputEncoding = 'ISO-8859-1', $outputEncoding = 'UTF-8') { - $possibleInputEncodings = ['ISO-8859-1', 'UTF-8']; - $outputEncoding = mb_internal_encoding(); - - return mb_convert_encoding($originalMessage, $outputEncoding, $possibleInputEncodings); + if (extension_loaded('intl') and class_exists('UConverter')) { + $fixedMessage = UConverter::transcode($originalMessage, $outputEncoding, $inputEncoding); + return $fixedMessage; + } + if (extension_loaded('mbstring')) { + $fixedMessage = mb_convert_encoding($originalMessage, $outputEncoding, $inputEncoding); + return $fixedMessage; + } + if (extension_loaded('iconv')) { + $fixedMessage = iconv($inputEncoding, $outputEncoding, $originalMessage); + return $fixedMessage; + } + $fixedMessage = preg_replace('#[[:^ascii:]]#', '?', $originalMessage); + return $fixedMessage; } } //End Klarna From 80263d5a67f53677835ca883f8b8c1df071268bf Mon Sep 17 00:00:00 2001 From: slavo Date: Wed, 20 May 2015 13:34:11 +0200 Subject: [PATCH 3/3] Private method Klarna::_fixMessageEncoding() update, refactoring and phpDoc update --- Klarna.php | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/Klarna.php b/Klarna.php index 7252199..2f7da7b 100644 --- a/Klarna.php +++ b/Klarna.php @@ -4421,27 +4421,27 @@ private function _checkConfig($config = null) /** * Fixes originalMessage encoding * - * @param $originalMessage + * @param string $originalMessage * @param string $inputEncoding (defaults to ISO-8859-1) * @param string $outputEncoding (defaults to UTF-8) * @return string */ private function _fixMessageEncoding($originalMessage, $inputEncoding = 'ISO-8859-1', $outputEncoding = 'UTF-8') { - if (extension_loaded('intl') and class_exists('UConverter')) { - $fixedMessage = UConverter::transcode($originalMessage, $outputEncoding, $inputEncoding); - return $fixedMessage; + if (extension_loaded('intl')) { + + return UConverter::transcode($originalMessage, $outputEncoding, $inputEncoding); } if (extension_loaded('mbstring')) { - $fixedMessage = mb_convert_encoding($originalMessage, $outputEncoding, $inputEncoding); - return $fixedMessage; + + return mb_convert_encoding($originalMessage, $outputEncoding, $inputEncoding); } if (extension_loaded('iconv')) { - $fixedMessage = iconv($inputEncoding, $outputEncoding, $originalMessage); - return $fixedMessage; + + return iconv($inputEncoding, $outputEncoding, $originalMessage); } - $fixedMessage = preg_replace('#[[:^ascii:]]#', '?', $originalMessage); - return $fixedMessage; + + return preg_replace('#[[:^ascii:]]#', '?', $originalMessage); } } //End Klarna