IMHO.WS

IMHO.WS (https://www.imho.ws/index.php)
-   Веб-программирование (https://www.imho.ws/forumdisplay.php?f=29)
-   -   Кодировка в POST запросе (https://www.imho.ws/showthread.php?t=125044)

n0ther 23.10.2007 08:46

Кодировка в POST запросе
 
Есть такая функция на JS

PHP код:

    function addXAJAX(coor_xcoor_y) {
        var 
form = $('objectAdd');
        var 
objName form['objname'];

        if (
$F(objName) == '') {
            
alert ('Не заполнено поле Имя объекта');
            return 
false;
        }

        if (
prevType == '') {
            
alert ('Не выбран тип объекта');
            return 
false;
        }

        var 
pars '';
        for(var 
j=0j<form.lengthj++){
            
pars += form[j].id '=' form[j].value '&';
        }

        
pars += 'type=' prevType '&x=' coor_x '&y=' coor_y;
        var 
voter = new Ajax.Updater('addobjX''addobjX.php', {method'post'parameterspars} );
    } 

и PHP код

PHP код:

<?php
    header
("Content-Type: text/html; charset=cp1251");
        if (isset(
$_POST['objname']) && isset($_POST['type'])) {
            echo (
$objname."<br>");
        }
?>

который выводит абракадабру типа Фыв

не могу понять в чем дело :hmm2:

RaZEr 23.10.2007 08:55

Выводит юникод данные туда где задана ASCII кодировка вроде цп1251.

n0ther 23.10.2007 10:38

хм, хорошо... на странице откуда я отправляю ajax-запрос стоит кодировка cp1251

пишу
PHP код:

var voter = new Ajax.Updater('addobjX''addobjX.php', {method'post'encoding'cp1251'requestHeader: ['Content-type''application/x-www-form-urlencoded; charset=cp1251'] ,parameterspars} ); 

конкретно указываю кодировку запроса... таже ситуация... видимо проблема еще раньше :confused:

добавлено через 38 минут
спасибо, разобрался :молись:

shuron 23.10.2007 13:10

Цитата:

Сообщение от n0ther (Сообщение 1474510)
добавлено через 38 минут
спасибо, разобрался

ну в чем дело было?

n0ther 23.10.2007 13:33

проблема была в том, что не смотря на то что кодировка на странице откуда передается запрос была win1251, данные из формы в POST запросе приходили в php в utf8.

Пришлось в php конвертить utf8 в cp1251. Либо iconv, либо в инете есть пример небольшой функции.

зы Вот если бы "всё" было в utf8, небыло бы такого гемороя

ch__ 03.11.2007 18:24

Трабл еще и в том, что разные браузеры по-разному работают с кодировкой на уровне JS и форм :(. Когда-то сталкивался...

uerter 21.11.2007 00:21

в РНР можно еще и средством MB делать разные действия с кодировкой если память не изменяет

RaZEr 21.11.2007 10:46

mbstring просто перегружает часть ф-ий чтобы substr, strlen и другие работали посимвольно а не побайтно. Для конвертации - iconv.

uerter 22.11.2007 23:57

я имел в виду
mb_convert_encoding :contract:

2 RaZEr
на счет mbstring хез... не пользовался
но то что выше указал довольно прилично работает! :yees:

Den+ 25.11.2007 15:57

c AJAX'ом вообще лучше всегда работать только в utf8, если в 1251 - то бывают глюки у некоторых браузеров

apoc 29.11.2007 11:12

Два дня искал выход из такой же ситуации :) оказалось, что просто нужно брать и делать конвертацию из УТФ-а. А так как мне нужно не только русские символы но и украинские, то пришлось лепить самому конвертор. Вот делюсь, лучше в нете не нашел. Топорно, зато есть все символы!!! :)
PHP код:

function Utf8Win($text)
{
    global 
$UtfTable,$WinTable;
    if (!isset(
$UtfTable))
    {
        for(
$i=0;$i<=255;$i++) { if ($i != 152) { $WinTable[] = chr($i); } }
        
$UtfTable = array(chr(0),chr(1),chr(2),chr(3),chr(4),chr(5),chr(6),chr(7),chr(8),chr(9),chr(10),chr(11),chr(12),chr(13),chr(14),chr(15),chr(16),chr(17),chr(18),chr(19),chr(20),chr(21),chr(22),chr(23),chr(24),chr(25),chr(26),chr(27),chr(28),chr(29),chr(30),chr(31),chr(32),chr(33),chr(34),chr(35),chr(36),chr(37),chr(38),chr(39),chr(40),chr(41),chr(42),chr(43),chr(44),chr(45),chr(46),chr(47),chr(48),chr(49),chr(50),chr(51),chr(52),chr(53),chr(54),chr(55),chr(56),chr(57),chr(58),chr(59),chr(60),chr(61),chr(62),chr(63),chr(64),chr(65),chr(66),chr(67),chr(68),chr(69),chr(70),chr(71),chr(72),chr(73),chr(74),chr(75),chr(76),chr(77),chr(78),chr(79),chr(80),chr(81),chr(82),chr(83),chr(84),chr(85),chr(86),chr(87),chr(88),chr(89),chr(90),chr(91),chr(92),chr(93),chr(94),chr(95),chr(96),chr(97),chr(98),chr(99),chr(100),chr(101),chr(102),chr(103),chr(104),chr(105),chr(106),chr(107),chr(108),chr(109),chr(110),chr(111),chr(112),chr(113),chr(114),chr(115),chr(116),chr(117),chr(118),chr(119),chr(120),chr(121),chr(122),chr(123),chr(124),chr(125),chr(126),chr(127),chr(208).chr(130),chr(208).chr(131),chr(226).chr(128).chr(154),chr(209).chr(147),chr(226).chr(128).chr(158),chr(226).chr(128).chr(166),chr(226).chr(128).chr(160),chr(226).chr(128).chr(161),chr(226).chr(130).chr(172),chr(226).chr(128).chr(176),chr(208).chr(137),chr(226).chr(128).chr(185),chr(208).chr(138),chr(208).chr(140),chr(208).chr(139),chr(208).chr(143),chr(209).chr(146),chr(226).chr(128).chr(152),chr(226).chr(128).chr(153),chr(226).chr(128).chr(156),chr(226).chr(128).chr(157),chr(226).chr(128).chr(162),chr(226).chr(128).chr(147),chr(226).chr(128).chr(148),chr(226).chr(132).chr(162),chr(209).chr(153),chr(226).chr(128).chr(186),chr(209).chr(154),chr(209).chr(156),chr(209).chr(155),chr(209).chr(159),chr(194).chr(160),chr(208).chr(142),chr(209).chr(158),chr(208).chr(136),chr(194).chr(164),chr(210).chr(144),chr(194).chr(166),chr(194).chr(167),chr(208).chr(129),chr(194).chr(169),chr(208).chr(132),chr(194).chr(171),chr(194).chr(172),chr(194).chr(173),chr(194).chr(174),chr(208).chr(135),chr(194).chr(176),chr(194).chr(177),chr(208).chr(134),chr(209).chr(150),chr(210).chr(145),chr(194).chr(181),chr(194).chr(182),chr(194).chr(183),chr(209).chr(145),chr(226).chr(132).chr(150),chr(209).chr(148),chr(194).chr(187),chr(209).chr(152),chr(208).chr(133),chr(209).chr(149),chr(209).chr(151),chr(208).chr(144),chr(208).chr(145),chr(208).chr(146),chr(208).chr(147),chr(208).chr(148),chr(208).chr(149),chr(208).chr(150),chr(208).chr(151),chr(208).chr(152),chr(208).chr(153),chr(208).chr(154),chr(208).chr(155),chr(208).chr(156),chr(208).chr(157),chr(208).chr(158),chr(208).chr(159),chr(208).chr(160),chr(208).chr(161),chr(208).chr(162),chr(208).chr(163),chr(208).chr(164),chr(208).chr(165),chr(208).chr(166),chr(208).chr(167),chr(208).chr(168),chr(208).chr(169),chr(208).chr(170),chr(208).chr(171),chr(208).chr(172),chr(208).chr(173),chr(208).chr(174),chr(208).chr(175),chr(208).chr(176),chr(208).chr(177),chr(208).chr(178),chr(208).chr(179),chr(208).chr(180),chr(208).chr(181),chr(208).chr(182),chr(208).chr(183),chr(208).chr(184),chr(208).chr(185),chr(208).chr(186),chr(208).chr(187),chr(208).chr(188),chr(208).chr(189),chr(208).chr(190),chr(208).chr(191),chr(209).chr(128),chr(209).chr(129),chr(209).chr(130),chr(209).chr(131),chr(209).chr(132),chr(209).chr(133),chr(209).chr(134),chr(209).chr(135),chr(209).chr(136),chr(209).chr(137),chr(209).chr(138),chr(209).chr(139),chr(209).chr(140),chr(209).chr(141),chr(209).chr(142),chr(209).chr(143));
    }
    
$text str_replace($UtfTable,$WinTable,$text);
    return 
$text;


Кстати, спасибо знаете куда говорить :))))

uerter 29.11.2007 12:17

Цитата:

Сообщение от Den+ (Сообщение 1488295)
c AJAX'ом вообще лучше всегда работать только в utf8, если в 1251 - то бывают глюки у некоторых браузеров

и в каких это браузерах?

apoc,
хм .... интересно ... попробуем

Hubbitus 03.12.2007 01:38

apoc, а стандартные iconv, recode чем плохи? В чем смысл очередного велосипеда?

apoc 03.12.2007 10:34

"да и нет тут смысла... его вообще нет..." (с) но в данном случае это "соломинка", которая иногда просто нужна, ну вот не включен iconv и нет перекодировки... упс... :) и сайт не пашет. кстати, я думаю, все таки, что в моем посте (с примером) больше смысла, чем в вашем (с претензиями), - без обид.

michaela 01.02.2008 16:30

2 apoc
мдя ... функция конечно норм

на счет темы в целом
лучше всего работать с utf и тогда никаких проблем ни у кого не будет

lyolik1 12.05.2008 00:39

Работать с utf8 - это хорошо. Но иногда желательно, чтобы даынные передающиеся AJAX'ом и просто при сабмите формы, обрабатывались одинаково.
Есть одно наблюдение по работе в JavaScript со строчками в разной кодировке. Обычно при отправке AJAX'ом строки кодируются функцией encodeURIComponent - тогда действительно будет отправлен utf8 (javascript сам сделает преобразование кодировки), если же использовать другую функцию - escape, то преобразования кодировки не будет. По моим наблюдениям, описанное поведение верно, для всех современных браузеров.


Часовой пояс GMT +4, время: 16:33.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.