2

Hola e estado desarrollando un script que genera una imagen a partir de un texto el cual es el siguiente:

<?php
 ini_set("default_charset", "UTF-8");
mb_internal_encoding("UTF-8");
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

$font ='Amperzand.ttf';
$fuente_tamano = 25;
$texto="Es irónico que el amor sea lo más bonito y lo más letal.";

utf8_encode($texto);
$im = imagecreate(400,400);

$fondo=imagecolorallocate ($im, rand(0,255), rand(0,100), rand(0,255));
//Colores
$blanco = imagecolorallocate($im, 0xFF, 0xFF, 0xFF);
$gris=imagecolorallocate ($im, 160, 160,160);
$negro=imagecolorallocate ($im, 0, 0, 0);
$colorGris = imagecolorallocate($im, 200, 200, 200);
$colorAzul = imagecolorallocate($im, 0, 0, 255);


$lines1 = explode('|', wordwrap(utf8_encode($texto), 28, '|'));

$y=50;

foreach ($lines1 as $line1) {
    {
    $line1=trim($line1);
                    //$line1 = str_pad($line1, 30,"0", STR_PAD_BOTH);
    $marco= ImageTTFBBox ($fuente_tamano, 0, $font, $line1);
    $x = (400 - ($marco[2]-$marco[0])) / 2;
    $y += 30;

    // El texto negro para que lo usaremos como borde
    imagettftext($im, $fuente_tamano, 0, $x + 2 , $y + 1 , $negro, $font, $line1);
    imagettftext($im,$fuente_tamano, 0, $x - 2 , $y - 1 , $negro, $font, $line1);

    // El texto blanco
    imagettftext($im,$fuente_tamano, 0, $x , $y, $blanco, $font, $line1);

    }       
}
header("Content-type: image/png");
imagepng($im);
imagedestroy($im);
?>

Como pueden apreciar la variable

$texto

contiene una frase Con acentos que a la hora pasarla a una imagen queda incompleta y con errores.

Me pregunto si existe alguna función que resuelva ese problema y como implementarla en este código .

E probado utf8_decode(); pero no logro solucinarlo

Usando la solución dada de usar utf8_encode(); e dejado el escript de esta manera pero igual sigue el problema espero alguien me pueda decir donde es que falla.

BotXtrem Solutions
  • 830
  • 1
  • 18
  • 38

3 Answers3

3

puedes probar colocando esto a tu archivo PHP:

<?php 
header('Content-Type: text/html; charset=UTF-8');
?>

De igual manera debes corregir la siguiente línea:

$lines1 = explode('|', wordwrap(utf8_encode($texto), 28, '|'));

A:

$lines1 = explode('|', wordwrap(utf8_decode($texto), 28, '|'));

como te habían mencionado utiliza utf8_decode

Saludos

Edwin Vasquez
  • 466
  • 5
  • 14
2
private function properText($str){
    $str = mb_convert_encoding($str, "HTML-ENTITIES", "UTF-8");
    $str = preg_replace('[a-zA-Z áéíóúÁÉÍÓÚñÑ.]+',htmlentities('${1}'),$str);
    return($str); 
}

Espero te pueda servir esta función usando mb_convert_encoding(), preg_replace() y expresiones regulares (regex). (Quizá haya un mejor regex pero no sé mucho así que, espero te sirva)

Andy Samuel
  • 1,371
  • 7
  • 15
0

no uses utf8_decode(); usa utf8_encode(); ya que lo estas "decodificando" a utf8 y lo que necesitas es "codificarlo".

juank
  • 392
  • 2
  • 12
  • 1
    podrias agregar documentacion y un ejemplo basico, recuerda que hay otros usuarios que pueden tener el mismo problema – JackNavaRow Aug 21 '18 at 11:08
  • podrías darme algún ejemplo de como implementarlo en el código – BotXtrem Solutions Aug 22 '18 at 02:42
  • 1
    Ya me disculparan pero soy algo principiante en esto pero el problema qiue nos plantea el autor, lo podemos usar como ejemplo, solo es cambiar el `utf8_decode($variable);` por `utf8_encode($variable);` para que de esta manera hacepta las tildes y demas caracteres, el `utf8_encode();` es como si hiciesemos un `&acute;` en un texto de una pagina HTML estática, no sé si con esto ya soluciono esto jejej un saludo – juank Aug 22 '18 at 07:58
  • Gracias por el dato pero el problema aun sigue igual – BotXtrem Solutions Aug 23 '18 at 00:09