LINUX.ORG.RU

C чего начать разруливать кодировки в cgi скриптах


0

0

вобщем есть форма с текстовым полем и обрабатывающий скрипт момещающий это поле в базу mysql.

надо чтобы русский текст введённый в формочке был помещён в базу в заданой кодировке

с чего начать

★★★★★

выполни сразу после коннекшена скл:
set names 'you-encoding';

и далее оно само будет конвертить.

roller ★★★
()
Ответ на: комментарий от roller

мне кажется что этого скорее всего будет недостаточно.

как например на тему сконвертить следующую строку:

& # 1 0 8 7 ; & # 1 0 8 8 ; . & # 1 0 5 1 ; & # 1 0 7 7 ; & # 1 0 8 5 ;

cvv ★★★★★
() автор топика
Ответ на: комментарий от cvv

> на перле

Перл и cgi - устаревшие и ограниченые языки. Для написания современных веб-проектов следует использовать Ruby On Rails.

anonymous
()
Ответ на: комментарий от MKuznetsov

мне не скрипт написать - мне идею понят что и куда рулить

а скрипт уже как минимум с английским проблем не имеет

cvv ★★★★★
() автор топика
Ответ на: комментарий от anonymous

CGI - язык говориш...

во до чего людей руби доводит. ТЕБЕ АССЕБМЛЕР НУЖЕН а не руби

cvv ★★★★★
() автор топика
Ответ на: комментарий от cvv

А в чем конкретно проблема? С веба может прилететь в разных кодировках? Или что? При нормально настроеном сервере с веба должно приходить все время в одной кодировке. Т.е. она должна быть известна. Если она не совпадает с той, которая в базе, значит надо отдельной директивой обратиться к базе и разъяснить ей кодировку клиента (скрипта). Правда если в скрипт приходит utf-8, то могут возникнуть некоторые проблемы и в базу пойдет уже битый utf. В общем, поскольку непонятно, в чем именно на данный момент загвоздка, то и сказать что-то внятное затруднительно.

ach
()
Ответ на: комментарий от ach

> если в скрипт приходит utf-8, то могут возникнуть некоторые проблемы и в базу пойдет уже битый utf.

Это какие же такие нецензурные действия надо выполнять над utf-8, чтоб он побитым в базу уходил?

watashiwa_daredeska ★★★★
()
Ответ на: комментарий от cvv

> как например на тему сконвертить следующую строку:

> & # 1 0 8 7 ; & # 1 0 8 8 ; . & # 1 0 5 1 ; & # 1 0 7 7 ; & # 1 0 8 5 ;

Хм... А где ты в CGI такую строку получаешь? Я что-то такого не помню, хотя может просто запамятовал какой хитрый encoding POST-запросов...

watashiwa_daredeska ★★★★
()
Ответ на: комментарий от cvv

Моя практика говорит, что такое возникает в параметрах, если форма была 
в восьмибитной кодировке, а пользователь ввел в нее символы, в этой 
кодировке не отобразимые (например, форма в win-12511, а ввели текст с 
умляутами или по-польски с l-перечеркнутой; или форма в latin-1, а ввели русский текст). 

Если таких форм несколько и в разных кодировках - то проблема не 
решается в принципе. Иначе код типа

$cgiparams =~ s/%23%26(\d+)/uri_escape_utf8(chr($1))/ge;
$cgiparams =~ s/((?=%[0-9a-f]{2})+)/uri_escape_utf8(decode('encoding-of-form',uri_unescape($1
)))/gie;


будучи примененным к нераспарсенной search части урла (т.е. тому, что после '?')
переведет его в заэскейпанный UTF-8.

За точность кода не ручаюсь - писал по памяти из дома, но идея должны быть ясна.

anonymous
()
Ответ на: комментарий от ach

> А в чем конкретно проблема? С веба может прилететь в разных кодировках? Или что? При нормально настроеном сервере с веба должно приходить все время в одной кодировке.

Кодировка CGI-параметров практически не зависит от сервера - она зависит от кодировки страницы с формой, которую пользователь за-submit-ил. Если ты, например, даешь размещать формочки на чужих сайтах ("поиск яндексом/гуглем по этому сайту"), то ты вообще не можешь ничего сказать про кодировку параметров заранее. См. также код в предыдущем посте.

anonymous
()

как-то выбирал между

use Encode;
use encoding "koi8-r;

и

use Text::Iconv;
my $converter = Text::Iconv->new("utf-8", "koi8-r);

выбрал последний вариант как наиболее удобный и предсказуемый

x97Rang ★★★
()
Ответ на: комментарий от anonymous

>Кодировка CGI-параметров практически не зависит от сервера

Она зависит от сервера постольку, поскольку от него зависит то, в какой кодировке он выплюнет клиенту документ с формой. Если с этим нет бардака, то и проблемы нет. Но в целом, пока что топикстартер так и не отписал, в чем конкретно проблема. При прочих равных я особых проблем в озвученной задаче не вижу.

ach
()
Ответ на: комментарий от anonymous

>форма в latin-1, а ввели русский текст

кажись так и есть.

как выруливать ситуацию? и где нужно указывать кодировку страницы? я склонен поставить utf8

cvv ★★★★★
() автор топика
Ответ на: комментарий от anonymous

>форма в latin-1, а ввели русский текст

кажись так и есть.

как выруливать ситуацию?

кодировку страницы достаточно прописать в:

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />

я склонен поставить utf8

cvv ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.