Кодировка текста

monk

Новичок
Хех, кажется я не умею пользоваться iconv
Так ее можно использовать:
$primer = iconv("UTF-8","windows-1251",$primer); ?
 

SiMM

Новичок
Мне кажется, ты не умешь читать мануал. Да, можно, если:
а) модуль iconv установлен
б) исходное сообщение - в UTF-8, и при перекодировании все символы могут быть представлены при помощи Windows-1251.
 

monk

Новичок
модуль iconv установлен - объясни пожалуйста с примером
 

SiMM

Новичок
В мануале есть примеры - я не понимаю, в чём проблема?
PHP:
$str = iconv('Windows-1251','UTF-8','В чём проблема?');
echo iconv('UTF-8','Windows-1251',$str);
 

monk

Новичок
В мануале не разберусь. Мне надо передать в базу/из базы
текст в переменной $text. Значит делать надо таким образом
$str = iconv('Windows-1251','UTF-8',$text);
$text=iconv('UTF-8','Windows-1251',$str);
?
 

SiMM

Новичок
Делать надо так, как надо - я понятия не имею о том, что у тебя и где в приведённом коде в какой кодировке - ИМХО, тебе уже давно пора браться за практику, а не заниматься теорией - будут проблемы - приходи, рассказывай в чём они заключаются (только грамотно, поскольку в грамотно поставленном вопросе содержится 95 процентов ответа) - очень вероятно, что здесь тебе помогут их решить.
 

monk

Новичок
По поводу "браться за практику", этот пункт я уже прошел с отрицательным результатом. В итоге оказалось, что я вообще не понимаю чего я делаю. Потому что есть куча вопросов, которые не дают мне возможность понять, что мне надо сделать и как.
Вот некоторые:
Что касаеся записи в базу:
В зависимости от чего в базу пишется инфа в той или иной кодеровке?
Возможно ли осущетвить запись в базу только в одной кодеровке используя только header ?
Если нет, то с помощью каких функций?
В какой кодеровке лучше хранить данные в базе?
Слышал такое "моя база по умолчанию настроена на windows-1251". Это значит, что данные нужно писать в нее только в win-1251?
Как можно узнать какая кодировка по умолчанию стоит в моей mySQL? И как изменить?
 

SiMM

Новичок
Автор оригинала: monk
В зависимости от чего в базу пишется инфа в той или иной кодеровке?
В базу инфа должна попадать всегда в одной и той же кодировке. Если сейчас у тебя кодировка базы - Windows-1251 - не вижу причин её менять на UTF-8, особенно, если сайт - не мультиязыковой.
Возможно ли осущетвить запись в базу только в одной кодеровке используя только header ?
Функция header к БД не имеет никакого отношения, все функции работы с БД (если это MySQL) описаны здесь
Если нет, то с помощью каких функций?
Перекодировка текста может быть осуществлена при помощи [m]iconv[/m]
В какой кодеровке лучше хранить данные в базе?
Слышал такое "моя база по умолчанию настроена на windows-1251". Это значит, что данные нужно писать в нее только в win-1251?
Да.
Как можно узнать какая кодировка по умолчанию стоит в моей mySQL?
SHOW VARIABLES LIKE 'character_set'
И как изменить?
В этом нет необходимости. Поскольку путаницы от этого у тебя в голове только увеличиться. Тем более, не факт, что твоя БД поддерживает UTF-8.
 

monk

Новичок
Остановился на ф-ции iconv. Не хочет она работать. Нашел в поиске, что надо ставить модуль libiconv. Т.е. получается если хост провайдер не предостовляет этот модуль. то нодо ставить самому?

Еще вопрос по поводу "узнать кодировку mySQL по умолчанию"
Это правильно? Выводит цифры какие-то..
$rt = mysql_query("SHOW VARIABLES LIKE 'character_set'");
echo '$rt';
 

SiMM

Новичок
Автор оригинала: monk
Остановился на ф-ции iconv. Не хочет она работать. Нашел в поиске, что надо ставить модуль libiconv. Т.е. получается если хост провайдер не предостовляет этот модуль. то нодо ставить самому?
Если у тебя есть соответствующие возможности ;) А вообще - загляни в ман по iconv - там ещё бывают примеры пользователей ;) Тебе может подойти либо от 18-Nov-2004 10:14 (HTML-Unicode), либо от 10-Dec-2004 08:15 ;)
echo '$rt';
Выводит цифры какие-то..
Не верю ;) Впрочем, это не отменяет необходимости забирать результаты запроса при помощи [m]mysql_fetch_assoc[/m].
 

monk

Новичок
Кто может знает вот эти каракули каким макаром могут получиться? Или может это еще можно и в кириллицу перекодить?

"5AB =0 OPERA - Тест на OPERA


\1F@>25@:0 OPERA - "чего то там" OPERA

-~{}~ 26.12.04 22:09:

Никто не знает...
Мне кажется что эта проблема не решаема...
Вот система хостера:
Lunix
Версия Apache 1.3.33 (Unix)
Версия PHP 4.3.9
Версия MySQL 4.0.22-standard

Под Lunix не получится прикрутиь iconv.dll библиотеку
Что же делат...
 

SiMM

Новичок
Автор оригинала: monk
Никто не знает...
Потому что ты не описал задачу. Откуда у тебя получаются эти данные? Каким образом? Из воздуха?
Под Lunix не получится прикрутиь iconv.dll библиотеку
Как прикрутить iconv под *nix написано в мане по [m]iconv[/m], кроме того, для работы с кодировками наличие библиотек вовсе необязательно, всё что нужно - умение программировать и таблица кодировки. Конечно пользоваться iconv проще и быстрее.
 

monk

Новичок
Есть например две формы:
Использовал ОПЕРУ.
В одной ($naz) пишу:

Тестируем ОПЕРА

В другой ($description):

Тестируем наш любимый КАТАЛОГ WAP сайтов на ОПЕРЕ,

Кликаю передать, в адресной строке передает скрипту, а скрипт пишет в MySQL в таком вот формате:

http://wap.monax.com.ru/cat/reg.php?mode=enter&naz="5AB8@C5<  &url=http://test na OPERA&description="5AB8@C5< =0H ;N18<K9 " WAP A09B>2 =0  ,

А уже на выходе этот текст выходит вот в таком виде соответственно:

"5AB8@C5< \1E\1F\15 \10

"5AB8@C5< =0H ;N18<K9 \1A\10"\10\1B\1E\13 WAP A09B>2 =0 \1E\1F\15 \15,


В header просто пишу:
header("Content-type:text/vnd.wap.wml");
Ничего такого: charset=UTF-8 и encoding="utf-8" , не использовал.
С чем это может быть связано?
 

SiMM

Новичок
Автор оригинала: monk
Тестируем наш любимый КАТАЛОГ WAP сайтов на ОПЕРЕ,
....
С чем это может быть связано?
Забей. Это глюк оперы. При работе с WAP эта зараза передаёт только младший байт символов, при чём, в UTF-16BE.
PS: может с однобайтными кодировками всё ок - но... они могут не пахать в мобилках
 

monk

Новичок
Опять проблемы...
Ставлю header:
header("Content-type:text/vnd.wap.wml;charset=utf-8");

А далее использую (не свою) ф-цию перекодировки из win в utf8:

"а"=>"\xD0\xB0", "А"=>"\xD0\x90",
"б"=>"\xD0\xB1", "Б"=>"\xD0\x91",
"в"=>"\xD0\xB2", "В"=>"\xD0\x92",

(Кстати сдесь возник еще вопр., если это \xD0\xB2 utf8, тогда это АБВ что?)

<?
include "utf8_win.php";
header("Content-type:text/vnd.wap.wml;charset=utf-8");

....
print utf8_win ($description."<br/>");
...
?>

Когда description в win1251 все ок, но почемуто когда в utf8 оно отображается каракулями: АБВ
А если убрать ф-цию перекодир print $description."<br/>";
тогра с этой строчкой все ок, в кириллице
Что скажите?
 

SiMM

Новичок
Ничего не скажу, только крылом махну...
Честно говоря ничего не понял из твоего сумбурного объяснения - ни в чём смотришь, ни что делаешь, ни в чём трудности - ибо у меня всегда работало. Привожу рабочий код, набранный в редакторе в кодировке Windows-1251
PHP:
<?
header('Content-Type: text/vnd.wap.wml; charset=UTF-8');
ob_start('CP1251toUTF8');
echo '<?xml version="1.0" encoding="UTF-8"?>';
?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">
<wml>
<card title="Проверка">
<p>Проверка кириллицы в UTF-8</p>
</card>
</wml>
<?
ob_end_flush();

function CP1251toUTF8($str){ // (C) SiMM
  static $table = array("\xA8" => "\xD0\x81", // Ё
                        "\xB8" => "\xD1\x91", // ё
                       );
  return preg_replace('#[\x80-\xFF]#se',
                      ' "$0" >= "\xF0" ? "\xD1".chr(ord("$0")-0x70) :
                       ("$0" >= "\xC0" ? "\xD0".chr(ord("$0")-0x30) :
                        (isset($table["$0"]) ? $table["$0"] : "")
                       )',
                      $str
                     );
}
?>
PS: по моему это может неработать только если каша в голове, т.е. полная путаница в кодировках и в том, что делаешь.
 

monk

Новичок
SiMM, просто когда посетители регистрятся скажем в рейтинге, то неизвестно с какого браузера и в какой кодировке они вносят данные. Все записи в разных кодировках получаются, поэтому и получается полная ерунда.
 

SiMM

Новичок
Автор оригинала: monk
неизвестно с какого браузера и в какой кодировке они вносят данные
Это можно узнать из приходящих заголовков (phpinfo(INFO_VARIABLES) + getallheaders)
Все записи в разных кодировках получаются
Потому что ты не приводишь всё к единой кодировке
поэтому и получается полная ерунда.
http://phpclub.ru/talk/showthread.php?threadid=60127
 

monk

Новичок
SiMM, посмотри, вот моя или твоя ф-ция конвертит русский в нормальный utf-8:

РёcyРЅРєРё, РјapРєРё, РјРѕРЅeты, aРЅeкдоты, С?РїapРіaлки, Рєapтинки, Рјeлодии

а если пользователь пишет не в win, а в utf8, то текст вылазиет вот в таком виде но с пробелами:

100%Р ґР ѕРЎЃРЎ‚Р °Р ІР єР ° Р ЎР њР Ў, Р їР ѕРЎ‡РЎ‚Р ѕР ІРЎ‹Р µ РЎЃР µРЎЂР ІР ёСЃРЎ‹ Р С‘ Р јР ЅР ѕР іР ѕ Р ІРЎЃР µР іР ѕ РёРЅРЎ‚Р µРЎЂР µРЎЃ

Немогу понять почему текст написанный в utf изменяется.

Использую эту ф-цию:
<?function utf8_win($s)
{
$s=strtr($s,array(
"а"=>"Р°", "А"=>"Рђ",
"б"=>"Р±", "Б"=>"Р‘",
"в"=>"РІ", "В"=>"Р’",
"г"=>"Рі", "Г"=>"Р“",
"д"=>"Рґ", "Д"=>"Р”",
"е"=>"Рµ", "Е"=>"Р•",
"ё"=>"С‘", "Ё"=>"РЃ",
"ж"=>"Р¶", "Ж"=>"Р–",
"з"=>"Р·", "З"=>"Р—",
"и"=>"Рё", "И"=>"Р?",
"й"=>"Р№", "Й"=>"Р™",
"к"=>"Рє", "К"=>"Рљ",
"л"=>"Р»", "Л"=>"Р›",
"м"=>"Рј", "М"=>"Рњ",
"н"=>"РЅ", "Н"=>"Рќ",
"о"=>"Рѕ", "О"=>"Рћ",
"п"=>"Рї", "П"=>"Рџ",
"р"=>"СЂ", "Р"=>"Р_",
"с"=>"СЃ", "С"=>"РЎ",
"т"=>"С‚", "Т"=>"Рў",
"у"=>"Сѓ", "У"=>"РЈ",
"ф"=>"С„", "Ф"=>"Р¤",
"х"=>"С…", "Х"=>"РҐ",
"ц"=>"С†", "Ц"=>"Р¦",
"ч"=>"С‡", "Ч"=>"Р§",
"ш"=>"С?", "Ш"=>"РЁ",
"щ"=>"С‰", "Щ"=>"Р©",
"ъ"=>"СЉ", "Ъ"=>"РЄ",
"ы"=>"С‹", "Ы"=>"Р«",
"ь"=>"СЊ", "Ь"=>"Р¬",
"э"=>"СЌ", "Э"=>"Р_",
"ю"=>"СЋ", "Ю"=>"Р®",
"я"=>"СЏ", "Я"=>"РЇ",
));
return $s;
}?>
 

SiMM

Новичок
monk, ответь мне на один простой вопрос - зачем пускать через перекодировщик текст в UTF-8, если он уже в UTF-8? Господи, ну неужели сложно понять функцию, состояющую из единственного оператора [m]strtr[/m], и прочтя ман понять, что она не телепат, и понятия не имеет, в какой кодировке ей сунули данные - она просто тупо перекодирует. Из CP1251 в UTF-8. И ей по барабану, что исходная кодировка была не CP1251.
PS: одного не понимаю - как у кого-то ума хватило испохабить такую функцию? А если я пользую редактор с кодировкой CP866? Или KOI-8?
PPS: и для кого я, спрашивается, ссылку выше приводил?
 
Сверху