Trabalhando com caracteres GD (imagettftext ()) e UTF-8

Apenas para constar - minha primeira pergunta aqui, mas espero que não seja minha última entrada na comunidade. Mas não é por isso que estou aqui.

Atualmente, estou desenvolvendo um sistema simples que precisa gerar uma imagem com um texto. Tudo correu bem até eu perceber que o GD não pode lidar com caracteres UTF-8 como

ā, č, ž, ä, ø, é

e assim por diante

Para esclarecer as coisas - eu estou usandoimagettftext ()

Tentando resolver meu problema, procurei nas profundezas do google e algumas soluções foram retornadas, nenhuma delas, infelizmente, resolveu meu problema completamente. Atualmente estou usando esse script que encontrei neste tópico -unção @PHP imagettftext () e unicode

private function properText($text){

    // Convert UTF-8 string to HTML entities
    $text = mb_convert_encoding($text, 'HTML-ENTITIES',"UTF-8");
    // Convert HTML entities into ISO-8859-1
    $text = html_entity_decode($text,ENT_NOQUOTES, "ISO-8859-1");
    // Convert characters > 127 into their hexidecimal equivalents
    $out = "";
    for($i = 0; $i < strlen($text); $i++) {
        $letter = $text[$i];
        $num = ord($letter);
        if($num>127) {
          $out .= "&#$num;";
        } else {
          $out .=  $letter;
        }
    }

    return $out;

}

e funciona bem para alguns caracteres, mas nem todos, por exemplo, um com trema não é convertido corretament

Nesse momento, não tenho mais certeza de onde e o que procurar, pois não posso prever a entrada do usuário. Para ser mais preciso, o sistema está retirando nomes de artistas de um feed xml e usando os dados para a geração de imagens (não pretendo oferecer suporte a hieróglifos

Assegurei-me de que os dados coletados no feed fossem de fato UTF-8 usandomb_detect_encoding () e verifiquei se todos os caracteres que atualmente não são exibidos corretamente estão localizados no arquivo de fonte que estou alimentando oimagettftext ()unção @ verificando-a com windows charmap ferramenta.

Felizmente, posso encontrar minha resposta aqui e desde já agradeço sua ajuda!

edita

Para esclarecer - os caracteres não são exibidos corretamente ou, para ser mais preciso, são substituídos por caracteres malformados. Aqui está uma captura de tela

deve ler "José González"

edit No2

Using bin2hex () função @ nos dados recuperados do feed xml retorna iss

José González -> 4a6f73c3a920476f6e7ac3a16c657a
// input -> bin2hex(input)

edit - corrigido

Enquanto eu continuava minha pesquisa, encontrei uma resposta para o meu problema, esse pedaço de código conseguiu!

$text = mb_convert_encoding($text, "HTML-ENTITIES", "UTF-8");
$text = preg_replace('~^(&([a-zA-Z0-9]);)~',htmlentities('${1}'),$text);
return($text); 

Agora, todos os caracteres que me incomodaram são exibidos corretament

questionAnswers(4)

yourAnswerToTheQuestion