AJAX: принудительное кодирование UTF-8 - PullRequest
3 голосов
/ 06 мая 2011

У меня есть веб-страница в UTF-8, определенная в заголовке

<meta charset="utf-8" />

Тогда у меня есть внешний файл .js, содержащий следующий код:

function ajax_db(){
    $(document).ready(function(){
//some variables defined

        $.ajax({
            type:"POST",
            url:"db.php",
            data:"u="+uname+"&p="+pass+"&m=1",
            dataType:"text",
            contentType: "application/x-www-form-urlencoded;charset=utf-8",
            success: function(reply){
                $("#regstat").html("<p class='status'>"+reply+"</p>");
            }
        });
    });
}

Как видите, запрос переходит к db.php, и если m установлен в 1 и не все поля заполнены, он заканчивается здесь:

$mode = htmlspecialchars($_POST['m']);

//Mode: 1 - register, 0 - log in, 2 - log out

if ($mode == 1){

if (empty($_POST['u']) || empty($_POST['p']) || empty($_POST['email'])){
    $reply = "Словенъска";
    echo utf8_encode($reply);
    exit;
}
//more code
}

Проблема в том, что вместо текста возвращается моджибаке. Я пытался заставить кодировку utf-8 везде, где мог, я вставил в db.php следующие строки:

mb_internal_encoding( 'UTF-8' );

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

Никакого эффекта. Кроме того, если я удалю функцию utf8_encode (), будут возвращены поля с вопросительными знаками, которые должны указывать, что utf-8 не используется.

Где может быть проблема?

Спасибо за ваше время.

1 Ответ

2 голосов
/ 06 мая 2011

Вы также должны убедиться, что файл db.php сохранен в кодировке UTF-8.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...