PHP의 GD 함수 imagettftext()는 기본 문자 인코딩에 주의를 기울여야 합니다.
저자:Eve Cole
업데이트 시간:2009-06-07 15:15:31
요즘 개인화된 포럼 서명과 유사한 작은 기능을 개발 중입니다. 회원 정보를 기반으로 텍스트가 포함된 그림을 자동으로 생성하는 것입니다. 이미지 연결은 imagecopy(), imagecopyresampled() 등의 함수를 사용하여 수행할 수 있습니다. 그러나 텍스트를 그리는 경우 문제가 발생합니다. 텍스트 템플릿은 텍스트 파일에 저장됩니다. 프로그램은 먼저 파일을 읽고 그 안에 있는 변수를 데이터로 바꾼 다음 imagettftext() 함수를 사용하여 그림에 그림을 그립니다.@_@ ...그래서 Google에서 관련 문제를 검색한 결과 대부분의 사람들이 imagettftext() 함수에 전달된 문자열을 UTF-8로 인코딩해야 한다고 말하고 있으며 공식 PHP 매뉴얼에도 "UTF-8로 인코딩된 문자열"이 명확하게 명시되어 있는 것을 발견했습니다. ."직접 전달할 수 있습니다." 그런데 문제는 템플릿 파일의 인코딩이 원래 UTF-8이라는 점인데, 좀 헷갈립니다. 필사적으로 EmEditor를 사용하여 원본 템플릿 파일을 열고 다른 인코딩으로 변환을 시도한 후 GD에서 출력된 왜곡된 코드와 비교해 보았습니다. EUC-JP 인코딩으로 변환했을 때 실제로 왜곡된 코드와 일치하는 것으로 나타났습니다. GD에 의한 출력... 즉, 여기 서버의 GD 기본 인코딩은 EUC-JP이고 일본어 인코딩입니다. php.ini 설정을 검색했는데 관련 옵션이 없어서 이 기본 인코딩이 어디에 설정되어 있나요? PHP 컴파일 매개변수에 매우 의심스러운 "--enable-gd-jis-conv" 매개변수가 있음을 발견한 사람은 Si Wen의 형제 Niu였습니다. Google은 이 컴파일 매개변수와 관련된 많은 잘못된 문제를 발견했습니다. 공식 매개변수 설명 "GD: Enable JIS-mapped 일본어 글꼴 지원."입니다. 이는 GD가 일본어로 인코딩된 글꼴을 지원한다는 의미입니다(젠장, 중국어로 인코딩된 글꼴을 지원하는 컴파일 옵션이 왜 없는 걸까요...PHP도 일본어로 인코딩된 글꼴을 차별합니까? 국적 = =b), 직설적으로 말하면 활성화합니다. 이 옵션을 활성화하면 GD는 TTF 글꼴 라이브러리에서 127보다 큰 부분(즉, 표준 라틴 글꼴 라이브러리에 속하지 않는 부분)을 다음과 같이 매핑합니다. 일본어 JIS 순서에 따르게 되며, 중국어 글꼴을 매핑할 때 자연스럽게 깨질 수 있습니다. 더 이상 고민하지 말고 이 옵션을 제거하고 다시 컴파일하면 문제가 해결될 것입니다. 이 옵션을 제거하면 imagettftext()의 기본 인코딩이 UTF-8이 되어 중국어가 정상적으로 표시됩니다~