Русский, английский и иврит... война :)

Сенсей

Новичок
Русский, английский и иврит... война :)

Имеем 3 поля... заполнаем их ....

1 - текст на русском

2 - текст на английском

3 - текст на иврите

страница на которой стоят эти поля имеет :

Код:
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=windows-1251">
Нажимаем отправить... достаем данные из $_POST и суем в мускул ... в итоге получаем текст:

1 - вместо русского имеем коды букв : &amp;#1050;&amp;#1072;&amp;#1093;&amp;#1072;&amp;#1093;&amp;#1089;&amp;#1090;&amp;#1072;&amp;#1085;

2 - анлийский заходит нормально

3 - вместо иврита какой то бред из русских букв

------------------
Как с этим бороться?
 

untied

Сдвинутый новичок
Интересно, Сенсей, как ты себе представлял совмещение сразу трех совершенно разных наборов символов в кодировке Win-1251? Там всего 256 значков. ;)
unicode тебе поможет.
 

untied

Сдвинутый новичок
UTF-8 -- это, по-моему, не совсем то (это какой-то тип Unicode, но кастрированный -- поищи инфу в инете; но, в принципе, он может и подойти).

Устанавливать кодировку мета-тэгом не совсем правильно (некоторые браузеры этот тег могут проигнорировать). Устанавливать нужно заголовок при выводе формы скриптом:

header("Content-type: text/html; charset=unicode");

Ну и, разумеется, вся страничка должна быть сохранена в Unicode. EditPlus тебе в этом поможет.

Да, и кстати! На иврите текст пишется справа налево. То есть одно поле должно заполняться справа налево. ;) В CSS есть какой-то стиль, который задает подобное начертание. Опять же -- смотри источник ( w3.org, CSS, level 2 -- есть русский перевод )
 

SiMM

Новичок
Как сделать многоязычную WWW страницу
PS: БД в каждый момент времени может работать только с одной, конкретной кодировкой.

> это какой-то тип Unicode, но кастрированный - поищи инфу в инете
Прежде чем нести подобную чушь, неплохо бы самому ознакомиться с информацией.

> Устанавливать нужно заголовок при выводе формы скриптом:
> header("Content-type: text/html; charset=unicode");
Это, имхо, не лучшее решение - под виндой имеют место быть проблемы с байтом 0x00. Лучшее решение - UTF-8
 

Demiurg

Guest
SiMM
я не понял, что ты хочешь сказать. я хотел сказать, что такого чарсета, как unicode - нет.
 

SiMM

Новичок
> что ты хочешь сказать
По ссылке вполне не двусмысслено говорится о том, что Осёл его понимает.

> такого чарсета, как unicode - нет.
Я прекрасно знаю, что Unicode - это класс кодировок, только вот microsoft думает (или когда-то думала?) иначе.
Я не говорю, что использовать такое именование charset'а можно - я лишь показал, откуда могут расти ноги. Собственно, это же мнение озвучено и по ссылке - These character sets are not to be used for labeling documents.
 

Demiurg

Guest
>По ссылке вполне не двусмысслено говорится о том, что Осёл его понимает.
кого его ? unicode ему понимать не надо, ему надо понимать конкретные кодировки.

>Я прекрасно знаю, что Unicode - это класс кодировок
это не класс кодировок. грубо говоря, unicode - это таблица символов плюс некоторые стандарты.
 

SiMM

Новичок
> кого его ?
PHP:
<?
header('Content-Type: text/html; charset=unicode');
function conv($str){return iconv('Windows-1251','UTF-16LE',$str);}
ob_start('conv');
?>
<html><head>
</head>
<body>
Проверка
</body>
</html>
 

Demiurg

Guest
Еще раз повторяю, нет чарсета unicode. IE скорее всего просто анализирует текст и выставляет нужный чарсет.
 

neko

tеam neko
именно так
ie вообще слишком много на себя берет в плане анализа содержимого...
 

Demiurg

Guest
попробуй сделать тоже самое с
header('Content-Type: text/html; charset=verycleverie');
 

SiMM

Новичок
> Еще раз повторяю, нет чарсета unicode
Чарсета, стандартного, нет - однако это не мешает ослу подразумевать под ним вполне конкретную кодировку.

> IE скорее всего просто анализирует текст и выставляет нужный чарсет.
Если бы это действительно было так, то при изменении хидера на левый (или вообще убирании оного) он бы продолжал показывать всё правильно (он же умный - сам кодировку определяет). В осле - не воспроизводится. Я специально использовал UTF-16LE, чтобы в контенте не было BOM (по BOM я и сам могу догадаться - хотя это можно и визуально сделать ;) ). И потом, не вижу особого смысла в упоминаниях на microsoft.com того, чего нет ;)

> попробуй сделать тоже самое c charset=verycleverie
IE такой кодировки не знает :) И трактует её, соответственно неправильно. Я бы наверно всё же не стал столь упорствовать, если бы не был уверен в том, что осёл понимает charset=unicode. Отсюда я делаю вывод, что автоопределение кодировки ослом - всего лишь миф.
 

untied

Сдвинутый новичок
Originally posted by SiMM
> это какой-то тип Unicode, но кастрированный - поищи инфу в инете
Прежде чем нести подобную чушь, неплохо бы самому ознакомиться с информацией.


Кхе.
Ну дык там именно это и написано про UTF-8. Что это неполноценная Unicode (потому что в Unicode все символы 16-и битные). Я совершенно точно помнил, что настоящий Unicode и UTF-8, а так же UTF-7 суть разные вещи.

И совершенно незачем так переживать, SiMM! Я честно написал "по-моему", отправив автора к первоисточникам. Чрезвычайно рад, что ты внес ясность, и UTF-8 автору подойдет для его целей! :)
 

Demiurg

Guest
untied
ты очень сильно ошибаешься, unicode - это стандарт, utf-8 - чарсет. utf-8 преставляет весь спектр unicode-самволов, даже те, которые еще не определены.
 

untied

Сдвинутый новичок
Ну я, конечно, не спец по уникодам. Но у меня стоит EditPlus, и он умеет сохранять документы и в Unicode, и в UTF-8, и в UTF-7 (только что специально проверил). То есть это разные вещи, все-таки.
 

Demiurg

Guest
untied
давай тогда ты не будешь говорить о том, чего не понимаешь ?
 

fixxxer

К.О.
Партнер клуба
мелкософт может думать все, что угодно. это не показатель. кодировки unicode не существует. это термин, определяющий класс кодировок.
 
Сверху