Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: GD, IMagick. i Chińskie znaki w utf-8
Forum PHP.pl > Forum > PHP
x_O
Witam,

Mam problem dość osobliwy pewnie na tą część świata. Potrzebuję wyświetlić chińskie znaki zakodowane w utf-8 za pomocą biblioteki GD lub Imagic.
Żadna z nich nie pozwala mi w tym momencie nawet zbliżyć się do tematu. Tekst który potrzebuję wyświetlić mam zapisany w pliku, nie wklejam go kod w żaden sposób, a plik na pewno jest dobrze zdefiniowany, bo kiedy używam do wyświetlenia html chinskie krzaki są wyświetlone poprawnie.

Przykładowe kody:
1 IMagick, jakiś tutorialowy. zmieniłem tylko kodowanie i tekst, który jest pobierany z pliku
  1. <?php
  2. $image = new Imagick();
  3. $draw = new ImagickDraw();
  4. $pixel = new ImagickPixel( 'gray' );
  5. $image->newImage(800, 75, $pixel);
  6. $pixel->setColor('black');
  7. $text = file_get_contents('text/5FB4-5FFA.txt');
  8. //$draw->setFont('fonts/ch.ttf');
  9. $draw->setFontSize( 30 );
  10. $image->annotateImage($draw, 10, 45, 0, $text);
  11. $image->setImageFormat('png');
  12. header ('Content-type: image/png; charset=utf-8');
  13. echo $image;
  14. ?>


2. GD
  1. <?php
  2. header('Content-type: image/png; charset=utf-8');
  3. $im = imagecreatetruecolor(400, 20);
  4. $white = imagecolorallocate($im, 238, 238, 238);
  5. $black = imagecolorallocate($im, 21, 21, 21);
  6. imagefilledrectangle($im, 0, 0, 399, 29, $black);
  7. $text = file_get_contents('text/3400-343A.txt');
  8. $font = 'fonts/ch.ttf';
  9. imagettftext($im, 14, 0, 10, 16, $white, $font, $text);
  10. imagepng($im);
  11. imagedestroy($im);
  12. ?>


Dzięki

x_O
devnul
zdaje się że problem ten jest opisany szerzej na bugs.php.net
jeśli jeszcze trzeźwo myślę i pamięć mnie nie zawodzi to pełne wsparcie dla UTF'a ma pojawić się wraz z php6 a wraz z nim prawdopodobnie znikną tego typu problemy.
x_O
Słyszałem coś o niepełnym wsparciu dla utf-8 w php.
Jednak nie do końca jestem przekonany, ze to to. Te znaczki mi się całkiem świetnie otwierają i wyświetlają w html. Tylko biblioteki do obrazków jakoś nie działają. Chyba dla mnie to nis do konca zrozumiale. Może pominąłem jakąś oczywistą rzecz??

Panowie i Panie, jakieś pomysły jeszcze?
devnul
html to nie php html jest interpretowany przez parser user agenta (przeglądarki, robota itp) php przez własne mechanizmy które jak narazie wspierają kodowanie znaków 8-bitowych
przykład?
spróbuj w php "pociąć" po literce tekst zakodowany utf'em z ogonkami lub chińskimi znakami sotsując do tego celu np coś podobnego
  1. <?php
  2. $string="święta wielkanocne"; //
  3. echo "$string \n";
  4. echo $string{1};
  5. ?>

następnie popatrz co wyświetli się w źródle wygenerowanym takim skryptem.
x_O
Hej,

Rozumiem twój punkt widzenia. To jeszcze zapytam czy jak wyświetlam ten znaczki z pliku

  1. <?php
  2. <html>
  3. <head>
  4. <meta http-equiv="content-type" content="text/html; charset=utf-8">
  5. </head>
  6. <body>
  7. <?php
  8. echo file_get_contents('text/3400-343A.txt');
  9. ?>
  10. </body>
  11. </html>
  12. ?>


To jest to przepuszczane przez PHP i moim zdaniem efekt powinien być podobny jak w przypadku GD, jednak tutaj krzaczki mają się świetnie i się wyświetlają tak jak powinny.

Może ktoś jeszcze do dyskusji?

x_O
devnul
nie rozumiesz widzę. przepuszczasz przez php ciąg znaków a znaczniki zakodowane utf'em to w uproszczeniu nic innego jak 8bitowce z dodatkowymi bitami przyklejonymi do znaków specjalnych. php zwyczajnie wypluwa to co widzi w w pliku, natomiast w wypadku gd php musi wyodrębnić po znaku z ciągu żeby na jego miejsce podstawić odpowiedni znak z wybranej czcionki i tu się zaczynają problemy na zasadzie jaką przedstawiłem w poście wyżej.
x_O
No nie skumałem przyznam się szczerzę. Myślałem że skoro używam fontów chińskich w GD to też "jakoś" za działa.
Fajnie, dzięki za pomoc, a może masz jakiś pomysł na alternatywę do tego jak wyświetlić chińskie znaki w grafice?
devnul
szczerze to przychodzą mi do głowy dwie rzeczy. przkazywać dane do wygenerowania obrazka jakiejś zewnętrznej aplikacji (np czymś w pythonie czy perlu) lub (drastyczne tongue.gif) zrobić sobie bitmapy z chińskimi krzaczkami i używać ich zamiast czcionki winksmiley.jpg
x_O
Poprawna czcionka ściągnięta z adresu jakiegoś urzędu w chinach załatwiła sprawę.

Szukać czcionek najlepiej które mają około 35,000 znaków w UTF.

Dzięki
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.