首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP GD 解決 imagettftext 中文亂碼:iconv 編碼轉換實戰

     編輯:PHP 相關知識

PHP GD 解決 imagettftext 中文亂碼:iconv 編碼轉換實戰

問題根因

imagettftext() 要求輸入字串為 UTF-8 編碼。若 PHP 原始碼檔案以 GBK/GB2312/Big5 儲存,直接傳入中文會導致亂碼。

解決方案:iconv() 轉碼

<?php

$im = imagecreatefromjpeg('./1.jpg');

$w = imagesx($im);

$h = imagesy($im);

$green = imagecolorallocate($im, 50, 100, 200);

// 關鍵:將 GB2312 字串轉為 UTF-8

$str = iconv('gb2312', 'utf-8', '幸福就在身邊');

imagettftext($im, 16, 0, 200, 100, $green, './simhei.ttf', $str);

header("Content-type: image/jpeg");

imagejpeg($im);

imagedestroy($im);

?>

最佳實踐建議

  1. 專案統一 UTF-8:IDE、編輯器、資料庫、HTML meta、PHP 檔案全部 UTF-8,徹底杜絕轉碼需求
  2. 若必須轉碼:使用 mb_convert_encoding() 替代 iconv(),前者對非法字元容錯更好
  3. 字體檔驗證:確認 .ttf 確實包含所需中文字符(可用字體檢視工具驗證)

替代方案:mb_convert_encoding() 範例

<?php

/* 轉換內部編碼為 SJIS */

$str = mb_convert_encoding($str, "SJIS");

/* 將 EUC-JP 轉換成 UTF-7 */

$str = mb_convert_encoding($str, "UTF-7", "EUC-JP");

/* 自動檢測編碼並轉換至 UCS-2LE */

$str = mb_convert_encoding($str, "UCS-2LE", "JIS, eucjp-win, sjis-win");

/* "auto" 擴展為 "ASCII,JIS,UTF-8,EUC-JP,SJIS" */

$str = mb_convert_encoding($str, "EUC-JP", "auto");

?>

mb_convert_encoding() 支援「自動偵測來源編碼」,在來源編碼不確定時極其實用。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved