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


English language detected! 🇬🇧

  We noticed that your browser is using English. Do you want to read this post in this language?

Read the english version 🇬🇧 Close

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

  Travaillez avec moi !