Как бороться с кодировкой в GD
Пытаюсь вывести русские буквы при использовании GD, пробовал ф-ции imagettftext, с указанием русскоязычного шрифта и imagestring. В заголовке пишу: header ("Content-type: image/png;charset=windows-1251"); но тем нименее выводятся каракули вместо русского. Подскажите пожалуйста как с этим бороться?
Код:
function iso2uni ($iso){
$uni="";
for ($i=0; $i < strlen($iso); $i++){
$thischar=substr($iso,$i,1);
$charcode=ord($thischar);
$uni.=($charcode>175)?"&#".(1040+($charcode-176)).";":$thischar;
}
return $uni;
}
$uni="";
for ($i=0; $i < strlen($iso); $i++){
$thischar=substr($iso,$i,1);
$charcode=ord($thischar);
$uni.=($charcode>175)?"&#".(1040+($charcode-176)).";":$thischar;
}
return $uni;
}
и скармливай ей строку, концертируя её из win в iso:
Код:
imagettftext($im, $size, $angle, $x, $y, $FontColor, $FontFile, iso2uni(convert_cyr_string("твой текст", "w", "i")));
Вот пример:
function win2uni($s)
{
$s = convert_cyr_string($s,'w','i'); // win1251 -> iso8859-5
// iso8859-5 -> unicode:
for ($result='', $i=0; $i<strlen($s); $i++) {
$charcode = ord($s[$i]);
$result .= ($charcode>175)?"&#".(1040+($charcode-176)).";":$s[$i];
}
return $result;
}
Преобразовать символы из одной кодировки в другую проще всего при помощи функции iconv() - iconv("Windows-1251", "UTF-8", "Это тест");
Хе! Если ты выводишь КАРТИНКУ и на картинке РИСУЕШЬ текст, то как по-твоему HTTP-заголовок может повлиять на надпись на картинке???
Проблему эту я решил так. Сделал папку шрифтов и начал отбирать те, в которых каракули не выводились. Ну а те которые с каракулями пришлось выкинуть. ИМХО исходя из этого есть "правильные" и "неправильные" русские шрифты ;)
Переходи на Юникод - там "неправильных" нету.