ImageMagic аннотирует коды символов, а не символы в annotateimage

#php #character-encoding #imagemagick #big5

#php #кодировка символов #imagemagick #big5

Вопрос:

Когда я отправляю строку китайского текста в ImageMagick для аннотирования изображения, печатаются коды символов. Например, вместо этого:

Китайский

Я понимаю это:

коды символов

Ниже приведен мой код. Очевидно, у меня установлен правильный шрифт. Когда я echo $textString; в строке 3, он правильно печатается в браузере.

     function drawText($textString,$height,$width){
  $textString = mb_convert_encoding($textString, 'UTF-8', 'BIG-5');
  echo $textString;
  $permitted_chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
  $filepath =  ABSPATH . "wp-contentuploadsh5pcontentwords\".substr(str_shuffle($permitted_chars), 0, 16).".PNG";
  $image = new Imagick();
  $draw = new ImagickDraw();
  $pixel = new ImagickPixel('white');

  /* New image */
  $image->newImage($width, $height, $pixel);

  /* Black text */
  $draw->setFillColor('black');

  /* Font properties */
  $draw->setFont(plugin_dir_path( __FILE__ ) .'wt034.ttf');
  $draw->setFontSize( 30 );

  /* Create text */
  $image->annotateImage($draw, 10, 45, 0, $textString);

  /* Give image a format */
  $image->setImageFormat('png');
  file_put_contents($filepath,$image);
return $filepath;
 

Ответ №1:

Похоже $textString , что значение, передаваемое в вашу функцию, закодировано в HTML. Ваши amp;#25105; строки — это HTML-объекты. Они отлично отображаются в браузерах, но вам нужно декодировать в utf-8, прежде чем преобразовывать их в big-5.

Попробуйте использовать html_entity_decode() для преобразования.

 $textString = html_entity_decode($textString, ENT_COMPAT, 'UTF-8');
$textString = mb_convert_encoding($textString, 'UTF-8', 'BIG-5');
 

Или вы можете попробовать это сделать за один шаг.

 $textString = html_entity_decode($textString, ENT_COMPAT, 'BIG5');
 

или, как вы в итоге это сделали, вот так:

 $textString = html_entity_decode($textString); 
 

Комментарии:

1. Спасибо, что указали мне правильное направление. Мой окончательный код был $textString = html_entity_decode($textString);