Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр 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, $angle, 105, 168, $color, $font_file, iconv("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 = @trim( htmlspecialchars ($_POST["sum_prop"], ENT_QUOTES)); 
 
$inn = @/*intval*/($_POST["inn"]); 
 
$kpp = @/*intval*/($_POST["kpp"]); 
 
$plateljik = @trim( htmlspecialchars ($_POST["plateljik"], ENT_QUOTES)); 
 
$bank = @trim( htmlspecialchars ($_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_img, 0, 0, 0, 0);
 
$height_font = 12;
 
$angle = 0;
 
$font_file = "images/times.ttf";
 
 
//запись текста на изображение
 
toUnicodeEntities($sum_prop);
 
 
$nom = imagettftext($src_img, $height_font, $angle, 270, 89, $color, $font_file, $nom_poruch);
 
$dat = imagettftext($src_img, $height_font, $angle, 400, 89, $color, $font_file, date("d.m.Y", time()) );
 
$sum = imagettftext($src_img, $height_font, $angle, 105, 168, $color, $font_file, $sum_prop);
 
$inn1 = imagettftext($src_img, $height_font, $angle, 63, 187, $color, $font_file, $inn);
 
$kpp1 = imagettftext($src_img, $height_font, $angle, 252, 187, $color, $font_file, $kpp);
 
$sun_cif = imagettftext($src_img, $height_font, $angle, 470, 187, $color, $font_file, "500-00");
 
$sch1 = imagettftext($src_img, $height_font, $angle, 470, 243, $color, $font_file, $schet1);
 
$bik1 = imagettftext($src_img, $height_font, $angle, 470, 303, $color, $font_file, $bik);
 
$sch2 = imagettftext($src_img, $height_font, $angle, 470, 320, $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 Яндекс.Метрика Яндекс цитирования