Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Как преобразовать кодировку строки из неизвестной в нормальную
 
 автор: Den*s   (27.07.2011 в 11:26)   письмо автору
 
 

Здравствуйте.
Скрипт накладывает на изображение текст, выше методом пост принимается переменная с русскими символами, при наложении на картинку получаются краказябры, как можно изменить кодировку этой переменной?

  Ответить  
 
 автор: Axxil   (27.07.2011 в 11:31)   письмо автору
 
   для: Den*s   (27.07.2011 в 11:26)
 

Функция iconv осуществляет преобразование кодировок.

  Ответить  
 
 автор: Den*s   (27.07.2011 в 11:38)   письмо автору
 
   для: Axxil   (27.07.2011 в 11:31)
 

Один из многих вариантов который я пробовал

<?
$sum 
imagettftext($src_img$height_font$angle105168$color$font_fileiconv("KOI8-U""UTF-8"$sum_prop));
?>


Нужно как то определить, получается, из какой кодировки преобразовывать

  Ответить  
 
 автор: MHz   (27.07.2011 в 12:14)   письмо автору
 
   для: Den*s   (27.07.2011 в 11:38)
 

Не сталкивался с подобной проблемой, но быть может поможет такой вариант?

<?php

iconv 
(mb_detect_encoding ($sum_prop), 'UTF-8'$sum_prop);

?>

  Ответить  
 
 автор: Den*s   (27.07.2011 в 12:24)   письмо автору
 
   для: MHz   (27.07.2011 в 12:14)
 

К сожалению не помогло :(
Теперь надписи нет вообще никакой

  Ответить  
 
 автор: Valick   (27.07.2011 в 13:08)   письмо автору
 
   для: Den*s   (27.07.2011 в 12:24)
 

подсмотрел у Котерова несколько лет назад, вроде помогало :)
// Функция преобразует текст из кодировки iso8859-5 в Unicode-entities. 
// Ее необходимо вызывать перед запуском imageTtfText(), чтобы корректно  
// отображать русские буквы. Аргумент $from задает исходную кодировку 
// страницы (см. convert_cyr_string() для описания значений параметра). 
function toUnicodeEntities($text, $from="w") 
 {  
  $text = convert_cyr_string($text, $from, "i"); 
  $uni = "";  
  for ($i=0, $len=strlen($text); $i<$len; $i++) 
   {  
    $char = $text{$i};  
    $code = ord($char);  
    $uni .= ($code>175)? "&#" . (1040+($code-176)) . ";" : $char;  
   }  
  return $uni;  
 } 

  Ответить  
 
 автор: Киналь   (27.07.2011 в 13:33)   письмо автору
 
   для: Den*s   (27.07.2011 в 11:26)
 

А в шрифте русские символы-то есть?

  Ответить  
 
 автор: Den*s   (27.07.2011 в 14:11)   письмо автору
 
   для: Киналь   (27.07.2011 в 13:33)
 

>А в шрифте русские символы-то есть?
Да, использую Times New Roman
Может я в коде что то не правильно делаю, но пока все попытки неудачны

<?
 $nom_poruch 
= @/*intval*/($_POST["nom_poruch"]); 
 
$sum_prop = @trimhtmlspecialchars ($_POST["sum_prop"], ENT_QUOTES)); 
 
$inn = @/*intval*/($_POST["inn"]); 
 
$kpp = @/*intval*/($_POST["kpp"]); 
 
$plateljik = @trimhtmlspecialchars ($_POST["plateljik"], ENT_QUOTES)); 
 
$bank = @trimhtmlspecialchars ($_POST["bank"], ENT_QUOTES)); 
 
$schet1 = @/*intval*/($_POST["schet1"]); 
 
$bik = @/*intval*/($_POST["bik"]); 
 
$schet2 = @/*intval*/($_POST["schet2"]); 
 
 
 
$filename "images/img.jpg";
 
$size_img getimagesize($filename);
 if (
$size_img[2] == 2$src_img imagecreatefromjpeg($filename);
 else if (
$size_img[2] == 1$src_img imagecreatefromgif($filename);
 else if (
$size_img[2] == 3$src_img imagecreatefrompng($filename);
 
 
$color imagecolorallocatealpha($src_img0000);
 
$height_font 12;
 
$angle 0;
 
$font_file "images/times.ttf";
 
 
//запись текста на изображение
 
toUnicodeEntities($sum_prop);
 
 
$nom imagettftext($src_img$height_font$angle27089$color$font_file$nom_poruch);
 
$dat imagettftext($src_img$height_font$angle40089$color$font_filedate("d.m.Y"time()) );
 
$sum imagettftext($src_img$height_font$angle105168$color$font_file$sum_prop);
 
$inn1 imagettftext($src_img$height_font$angle63187$color$font_file$inn);
 
$kpp1 imagettftext($src_img$height_font$angle252187$color$font_file$kpp);
 
$sun_cif imagettftext($src_img$height_font$angle470187$color$font_file"500-00");
 
$sch1 imagettftext($src_img$height_font$angle470243$color$font_file$schet1);
 
$bik1 imagettftext($src_img$height_font$angle470303$color$font_file$bik);
 
$sch2 imagettftext($src_img$height_font$angle470320$color$font_file$schet2);
 
 if (
$size_img[2] == 2)
 {
     
header("Content-type: image/jpeg");
    
imagejpeg($src_img);
 }
 
imagedestroy($src_img);
 
 
 
// Функция преобразует текст из кодировки iso8859-5 в Unicode-entities. 
 // Ее необходимо вызывать перед запуском imageTtfText(), чтобы корректно  
 // отображать русские буквы. Аргумент $from задает исходную кодировку 
 // страницы (см. convert_cyr_string() для описания значений параметра). 
 
function toUnicodeEntities($text$from="w"
 {  
  
$text convert_cyr_string($text$from"i"); 
  
$uni "";  
  for (
$i=0$len=strlen($text); $i<$len$i++) 
   {  
    
$char $text{$i};  
    
$code ord($char);  
    
$uni .= ($code>175)? "&#" . (1040+($code-176)) . ";" $char;  
   }  
  return 
$uni;  
 } 
?>

  Ответить  
 
 автор: Valick   (27.07.2011 в 14:23)   письмо автору
 
   для: Den*s   (27.07.2011 в 14:11)
 

функцию оперделяют до её использования
и обращаться к ней надо
не так
toUnicodeEntities($sum_prop); 

а так
$sum_prop=toUnicodeEntities($sum_prop); 

  Ответить  
 
 автор: Den*s   (27.07.2011 в 14:35)   письмо автору
 
   для: Valick   (27.07.2011 в 14:23)
 

Всё заработало, спасибо

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования