簡體   English   中英

當JS中的Base64編碼和PHP中的解碼時,Umlauts問題

[英]Umlauts issue when Base64 encoding in JS and decoding in PHP

我進行了很多搜索,但仍未找到造成問題的原因:

當調用我的php webservice時,我正在對登錄憑據(“ PeterPan:Ützel([])ÄÄÖÖ'”)進行編碼,並使用UTF-8傳遞它們:

$.ajaxSetup({
        beforeSend: function(request) {
            request.setRequestHeader("Authentication", auth);
        },
        type: "POST",
        contentType: "charset=utf-8"
    });
var tok = sUsername + ':' + sPassword;
    var hash = this.Base64.encode(tok);
    var auth = hash;
$.ajax({
        url: "php/login.php"
    });

在PHP中,我通過使用以下方式解碼字符串:

$headers = array();
foreach($_SERVER as $key => $value) {
    if (substr($key, 0, 5) <> 'HTTP_') {
        continue;
    }
    $header = str_replace(' ', '-', ucwords(str_replace('_', ' ', strtolower(substr($key, 5)))));
    $headers[$header] = $value;
}

$response['Encoded'] = base64_decode($headers['Authentication']);
$encoded = json_encode($response);
header("Content-Type: text/html; charset=utf-8");
echo $encoded;

響應到達時,編碼的字符串如下所示:“ PeterPan:\\ u00dctzel([])\\ u00c4 \\ u00c4 \\ u00d6 \\ u00d6'”

變音符號編碼錯誤...

我究竟做錯了什么?

我相信變音符號編碼正確。 但是,如果您需要將其打印或回顯到瀏覽器,則可能需要使用iconv()指定正確的編碼

您可以執行以下操作

javascript:

// returns PeterPan%3A%C3%9Ctzel(%5B%5D)%C3%84%C3%84%C3%96%C3%96
var value = encodeURIComponent(sUsername + ':' + sPassword);

PHP:

header('Content-Type: text/html; charset=utf-8'); // might need this

// returns PeterPan:Ützel([])ÄÄÖÖ
echo rawurldecode("PeterPan%3A%C3%9Ctzel(%5B%5D)%C3%84%C3%84%C3%96%C3%96");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM