юникод в gd

berkut

Новичок
юникод в gd

Что-бы отображать на рисунках текст в кодировке windows-1251, я использую ф-ию конвертации в юникод
PHP:
function convertStr($isoline) {
        for ($i = 0; $i < strlen($isoline); $i++) {
           $thischar = substr($isoline, $i, 1);
           $charcode = ord($thischar);
           $uniline .= ($charcode > 191) ? '&#'.(1040 + ($charcode - 192)).';' : $thischar;
        }
        return $uniline;
}
А как сконвертировать аналогичным образом текст из UTF-8?
 

berkut

Новичок
BRat это что-то не то. Выводятся вопросы, ладно хоть ошибок any2eucjp(): не выдаёт.
И всё-же, знающие люди, подскажите в какой именно кодировке принимает текст gd? Юникод - это как-то расплывчато. Как эта кодировка обозначается?
И как всё-таки преобразовать utf-8 эту загадочную кодировку, понятную gd?
 

BRat

o_0
а как тебе такое "решение":
PHP:
$text=utf_decode($text);
$text=convert_cyr_string($text,'i','w');
$text=convertStr($text);
почитай..[m]iconv[/m]
 

berkut

Новичок
Во-пкрвых iconv не установлен. Во-вторых, задам опять вопрос: в какую кодировку конвертировать?

$text=convert_cyr_string($text,'i','w');
тоже не подходит, потому-что в utf-8 японский текст.
 

berkut

Новичок
BRat, опять что-то нето. Самое интересное, что на 2 машинах, текст в кодировке windows-1251 нормально отображается при конвертации как
iconv('windows-1251', 'UTF-8', $str)
так и при конвертации вышеприведённой ф-ией convertStr!
А на 3-ей UTF-8 не воспринимается!? Нужно конвертить только ф-ией convertStr из windows-1251.
Сейчас попробывал на первых 2-х машинах, где работает и utf-8 и convertstr, сконвертировать текст из windows-1251 в utf-16 - выводятся крякозябры. Из этого можно сделать вывод, что convertstr конвертирует не в utf-16.
Вообще голова пухнет, 3-й день толком не сплю из-за этой ахинеи.
 

SiMM

Новичок
> А как сконвертировать аналогичным образом текст из UTF-8?
А зачем? Выводи страницу в UTF-8
 

berkut

Новичок
Дык страница в utf-8, но gd на 3-м сервере не воспринимает текст в utf-8 - выводятся вопросы.
 

SiMM

Новичок
berkut, должно помочь что-то вроде
PHP:
function _UTF8toUnicode($str){ // by SiMM
  $ret = ord($str{0});
  for ($mask = 0x01; ($ret|$mask) != 0xFF; $mask = $mask*2+1);
  $ret &= $mask;
  for ($i = 1; $i<strlen($str);$i++){
    $ret <<= 6;
    $ret += ord($str{$i})-0x80;
  }
  return $ret;
}

function UTF8toUnicode($str){ // by SiMM
  return preg_replace('#[\xC0-\xFF][\x80-\xBF]+#se','"&#"._UTF8toUnicode("$0").";"',$str);
}

echo UTF8toUnicode(iconv('Windows-1251','UTF-8','Проверка'));
-~{}~ 16.03.05 14:02:

Или вот ещё вариант с iconv
PHP:
function UTF8toUnicode($str){ // by SiMM
  return preg_replace('#[\xC0-\xFF][\x80-\xBF]+#se','"&#".join("",unpack("V",iconv("UTF-8","UTF-32LE","$0"))).";"',$str);
}
 

berkut

Новичок
SiMM Божественно! Последний вариант работает! Ура! Победа! Спасибо огромнейшее!
 
Сверху