ajax и windows-1251

will_get_it

Новичок
Добрый день. Тема изъезженная, знаю. Но все же. Есть сайт, там все выполнено в cp1251, аналогично и база.
Делаю ajax запрос, передаю в нем id. на выходе жду json. нужны всего 2 поля получить: id и name. id приходит, а name - null.

в php делаю вначале

PHP:
header('Content-Type: text/html; charset=windows-1251');
и в конце

PHP:
echo iconv("utf-8", "windows-1251", $result);
куда еще что засунуть?:(
 

WMix

герр M:)ller
Партнер клуба
понятно, что ничего не понятно!
json или html?
на выходе жду json.
cp1251 или utf-8?
все выполнено в cp1251, аналогично и база
iconv("utf-8", "windows-1251", $result)
^^^ заодно "windows-1251" пишется так 'cp1251' ^^^
PHP:
print_r($result)
 
Последнее редактирование:

will_get_it

Новичок
понятно, что ничего не понятно!
json или html?
в параметрах ajax запроса пишу { dataType: "json"}

cp1251.

тут не print_r() будет, а print_r(json_encode($results)). и в результате name: null
 

will_get_it

Новичок

will_get_it

Новичок
ну в том то и делo, что там не пусто) id приходит, у него name не пустой


ну вот это
PHP:
header('Content-Type: text/html; charset=windows-1251');
не то?
и дело не в text/html. если даже джейсон убрать из параметров запроса, то все равно name пустой приходит...
 

WMix

герр M:)ller
Партнер клуба
тогда показывай не пусто, далее заверни в json_encode($results) и показывай пусто. слова не нужны, только код!

и дело не в text/html
нет не в нем, но тоже!
 

WMix

герр M:)ller
Партнер клуба
ты в силах написать пример того что не работает?
 

AmdY

Пью пиво
Команда форума
Ты же пишешь, что у тебя всё в cp1251, а затем echo iconv("utf-8", "windows-1251", $result);
 

will_get_it

Новичок
Конечно)

вот ajax
PHP:
cycle: function() {
                var self = this;

                self.config.cityInput.change(function() {
                        var locationId = $('#city_location_id').val();
                       
                        self.fetch( locationId ).done( function( results ) {
                            console.log(results[0]);
                        });
                });

            },

fetch: function( locationId ) {
                console.log(locationId); 
                return $.ajax({
                    url: "/ajax/get_street_id.php",
                    data: { id: locationId },
                    type: "POST",
                    dataType: 'json'
                });
            },
вот php
PHP:
<?php
require_once($_SERVER['DOCUMENT_ROOT']."/inc/config.inc");
require_once($_SERVER['DOCUMENT_ROOT']."/inc/common.inc");

header('Content-Type: text/html; charset=windows-1251');

if( isset($_POST['id']) ) {


    $id = intval($_POST['id']);
    $sql = "SELECT * FROM streets WHERE locationId = $id";
    $res = $db->getAll($sql);

    echo iconv("utf-8", "cp1251", json_encode($res));

}
в консоле файрбага видим
PHP:
id"150605"
locationId"6307423"
namenull
streetId"606"
 

WMix

герр M:)ller
Партнер клуба
PHP:
  $res = $db->getAll($sql);
print_r( $res ); // что возвращает?
echo iconv("utf-8", "cp1251", json_encode($res));// там все выполнено в cp1251, аналогично и база. !! ВОПРОС, какого члена utf8
что говорит mysql на запрос
PHP:
SELECT name FROM streets WHERE locationId = 6307423
 
Последнее редактирование:

will_get_it

Новичок
PHP:
  $res = $db->getAll($sql);
print_r( $res ); // что возвращает?
echo iconv("utf-8", "cp1251", json_encode($res));// там все выполнено в cp1251, аналогично и база. !! ВОПРОС, какого члена utf8

возвращает
PHP:
Array
(
[0] => Array
(
[0] => 150000
[id] => 150000
[1] => 1
[streetId] => 1
[2] => 6308540
[locationId] => 6308540
[3] => Спасательная ул.
[name] => Спасательная ул.
)
[1] => Array
(
[0] => 150629
[id] => 150629
[1] => 630
[streetId] => 630
[2] => 6308540
[locationId] => 6308540
[3] => Коперный пер.
[name] => Коперный пер.
)
[2] => Array
(
[0] => 150851
[id] => 150851
[1] => 852
[streetId] => 852
[2] => 6308540
[locationId] => 6308540
[3] => ГСК Камаз тер.
[name] => ГСК Камаз тер.
)


...
и тэде
)
ну вот и я думаю, какого члена. ну ведь ajax только с utf работает. вот и вопрос, как ему передать кириллицу?
 

WMix

герр M:)ller
Партнер клуба
PHP:
echo/* iconv("utf-8", "cp1251", */json_encode($res)/*)*/;// база в cp1251 а не в utf-8
что теперь?
 

SergXP

Новичок
Если не ошибаюсь, нужно возвратить результат в UTF8
разве нет?
PHP:
<?php
     header('Content-Type: text/html; charset=utf-8'); // только здесь лучше тогда уж указать JSON а не html ))
    $id = intval($_POST['id']);
    $sql = "SELECT * FROM streets WHERE locationId = $id";
    $res = $db->getAll($sql);

    // либо так
    echo iconv("cp1251", "utf-8", json_encode($res));

    // либо так(да накладно, согласен)
    foreach($res as $key=>$val)
        $res[$key] = iconv("CP1251","UTF-8",$res[$key]);
    echo json_encode($res);

    // либо вот так
  echo  mb_convert_encoding( json_encode($res), "UTF-8");
P.S. давно с этой проблемой не сталкивался, все проекты на UTF ))
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
а ничего, что в http://www.json.org/ прямым текстом дана спецификация строкового типа данных
char
any-Unicode-character-
except-
"-or-\-or-
control-character

\"
\\
\/
\b
\f
\n
\r
\t
\u
four-hex-digits
поддержка всех 5ти русских кодировок в AJAX совсем не гарантирована
 

SergXP

Новичок
grigori, поэтому я и написал, что нужно пробовать каждый элемент отдельно переводить в UTF
это конечно не лучший вариант, но должно сработать.
PHP:
    foreach($res as $key=>$val)
        $res[$key] = iconv("CP1251","UTF-8",$res[$key]);
или прогнать через array_map();
 

С.

Продвинутый новичок
а ничего, что в http://www.json.org/ прямым текстом дана спецификация строкового типа данных
...
поддержка всех 5ти русских кодировок в AJAX совсем не гарантирована
Так сецификация из JSON, а вывод почему-то про AJAX.
Кроме того любой русский символ из не-UTF кодировок вполне вписывается в диапазон "any-Unicode-character". А уж как он потом будет отрендерен на экране, от другого зависит.
 
Сверху