
When I upgraded the Magento on the checkout page and that was “report.CRITICAL: Unable to serialize value. Error: Malformed UTF-8 characters, possible incorrectly encoded.”
1) Create registration.php file at Path :- app/code/Dolphin/Serializer
<?php
\Magento\Framework\Component\ComponentRegistrar::register(
\Magento\Framework\Component\ComponentRegistrar::MODULE,
'Dolphin_Serializer',
__DIR__
);2) Create module.xml file at Path :- app/code/Dolphin/Serializer/etc
<?xml version="1.0" ?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
<module name="Dolphin_Serializer" setup_version="1.0.0">
<sequence>
<module name="Magento_Framework"/>
</sequence>
</module>
</config>3) Create di.xml file at path :- app/code/Dolphin/Serializer/etc
<?xml version="1.0" ?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
<preference for="Magento\Framework\Serialize\Serializer\Json" type="Dolphin\Serializer\Rewrite\Magento\Framework\Serialize\Serializer\Json"/>
<preference for="Magento\Framework\Serialize\Serializer\JsonHexTag" type="Dolphin\Serializer\Rewrite\Magento\Framework\Serialize\Serializer\JsonHexTag"/>
</config>4) Create Json.php file at path :- app/code/Dolphin/Serializer/Rewrite/Magento/Framework/Serialize/Serializer
<?php
namespace Dolphin\Serializer\Rewrite\Magento\Framework\Serialize\Serializer;
class Json extends \Magento\Framework\Serialize\Serializer\Json
{
public function utf8ize($mixed)
{
if (is_array($mixed)) {
foreach ($mixed as $key => $value) {
$mixed[$key] = $this->utf8ize($value);
}
} elseif (is_string($mixed)) {
return mb_convert_encoding($mixed, "UTF-8", "UTF-8");
}
return $mixed;
}
/**
* @inheritDoc
* @since 101.0.0
*/
public function serialize($data)
{
$result = json_encode($this->utf8ize($data));
if (false === $result) {
throw new \InvalidArgumentException("Unable to serialize value. Error: " . json_last_error_msg());
}
return $result;
}
/**
* @inheritDoc
* @since 101.0.0
*/
public function unserialize($string)
{
$result = json_decode($string, true);
if (json_last_error() !== JSON_ERROR_NONE) {
throw new \InvalidArgumentException("Unable to unserialize value. Error: " . json_last_error_msg());
}
return $result;
}
}5) Create JsonHexTag.php file at path :- app/code/Dolphin/Serializer/Rewrite/Magento/Framework/Serialize/Serializer
<?php
namespace Dolphin\Serializer\Rewrite\Magento\Framework\Serialize\Serializer;
class JsonHexTag extends \Magento\Framework\Serialize\Serializer\JsonHexTag
{
/**
* @inheritDoc
* @since 102.0.1
*/
public function serialize($data): string
{
$data = $this->utf8convert($data);
$result = json_encode($data, JSON_HEX_TAG);
if (false === $result) {
throw new \InvalidArgumentException('Unable to serialize value.');
}
return $result;
}
public function utf8convert($mixed, $key = null)
{
if (is_array($mixed)) {
foreach ($mixed as $key => $value) {
$mixed[$key] = $this->utf8convert($value, $key);
}
} elseif (is_string($mixed)) {
$fixed = mb_convert_encoding($mixed, "UTF-8", "UTF-8");
return $fixed;
}
return $mixed;
}
}Hope this helps. Thanks.
Click one of our contacts below to chat on WhatsApp