#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);