在Javascript中将特殊字符编码到Base64并使用PHP中的base64_decode()进行解码

时间:2015-03-20 12:26:34

标签: javascript php

我的问题是base64_decode()函数不适用于特殊字符。也许问题是我正在使用ajax事件,我正在使用javascript中的base64.encode解析数据。 js代码:

description: $.base64.encode($("#Contact_description").val())

这是php代码:

$model->description = base64_decode($model->description);

其中$model->description$("#Contact_description").val()

示例这是描述值:TraianBăsescu,这就是我使用php解码的方式:TraianA sescu。我该怎么办?

更新 这是来自firebug的标题信息:

Content-Length  143
Content-Type    text/html; **charset=UTF-8**
Date    Fri, 20 Mar 2015 12:37:01 GMT

2 个答案:

答案 0 :(得分:1)

以下适用于我:

JavaScript的:

// Traian Băsescu encodes to VHJhaWFuIELEg3Nlc2N1
var base64 = btoa(unescape(encodeURIComponent( $("#Contact_description").val() )));

PHP:

$utf8 = base64_decode($base64);

答案 1 :(得分:1)

问题是Javascript字符串是用UTF-16编码的,而浏览器并没有提供很多很好的工具来处理编码。可以在MDN上找到专门用于处理Base64编码和Unicode的优秀资源:https://developer.mozilla.org/en-US/docs/Web/API/WindowBase64/Base64_encoding_and_decoding

他们建议的解决方案,用于编码字符串,而不使用经常引用的涉及已弃用的unescape函数的解决方案:

function b64EncodeUnicode(str) {
    return btoa(encodeURIComponent(str).replace(/%([0-9A-F]{2})/g, function(match, p1) {
        return String.fromCharCode('0x' + p1);
    }));
}

有关更多解决方案和详细信息,我强烈建议您阅读整个页面。