Remplacer des caractères UTF8mb4 en entités HTML dans une chaîne avec PHP
Publié le 22/06/2024 • Actualisé le 22/06/2024
Dans ce bout de code, nous voyons comment remplacer des caractères UTF8mb4 par des entités HTML dans une chaîne avec PHP. Ça peut être utile, par exemple, si votre « vieille » base de données ne supporte pas cet encodage.
<?php
declare(strict_types=1);
namespace App\Controller\Snippet;
/**
* J'utilise un trait PHP afin d'isoler chaque snippet dans un fichier.
* Ce code doit être apellé d'un contrôleur Symfony étendant AbstractController (depuis Symfony 4.2)
* ou Symfony\Bundle\FrameworkBundle\Controller\Controller (Symfony <= 4.1).
* Les services sont injectés dans le constructeur du contrôleur principal.
*/
trait Snippet306Trait
{
public function snippet306(): void
{
$rawString = 'Hello 🙏 world 🙂!';
echo 'inital string: '.$rawString.PHP_EOL;
$string = preg_replace_callback(
'/[\xF0-\xF7][\x80-\xBF]{3}/',
static function ($matches) {
return '&#'.hexdec(bin2hex(mb_convert_encoding($matches[0], 'UTF-32', 'UTF-8'))).';';
},
$rawString
);
echo 'final string: '.$string.PHP_EOL;
// That's it! 😁
}
}
Exécuter le snippet Plus sur Stackoverflow Snippet aléatoire