客户端或服务器正在删除变音符号

时间:2018-02-04 17:35:43

标签: javascript php jquery base64 php-5.2

我正在使用btoa将我的字符串编码为base64。但是,它似乎无法正常工作,因任何原因删除了任何变音符号。

我试图展示它,但在这个页面上它可以工作:

var content = "This text contains umlauts (ÖÜÄ) they will be removed on my webpage, but not in this demo for whatever reason";

alert(content);

content = btoa(content);

alert(content);

content = atob(content);

alert(content);

但它在我的网页上无效:

enter image description here

这是参数content

的值
PHA+VGhpcyB0ZXh0IGNvbnRhaW5zIHVtbGF1dHMgKMTc1ikuIExldHMgc2VlIGlmIHRoZXkgYXJlIGdldHRpbmcgcmVtb3ZlZC48L3A+

如果你解码这个base64编码的字符串here,那么你将得到这个结果:

  

此文本包含umlauts()。让我们看看他们是否得到了   除去。

正如你所见,无论出于何种原因你都会删除变音符号。

这是我编码字符串的代码片段,它用于将新闻条目发布到博客:

编辑:以下代码突然无任何变化。有关更多信息,请参阅下面的其他编辑。

var content = $(".ql-editor").html();

$.ajax({
    url: "ajax.php",
    method: "POST",
    data: {
        action: "postNews",
        autor: autor,
        content: btoa(content),
        date: date
    },
    success: function(response) {

        if (response.indexOf("error") === -1) {
            $("#statusBoxMessage").html("Ihr Eintrag wurde erfolgreich veröffentlicht.");
            $("#statusBoxImage").attr("src", "gfx/page/checkmark.jpg");
            showStatusBox("success");
        } else {

            $("#statusBoxMessage").html("Fehler! Der Eintrag konnte nicht erstellt werden! (" + response + ")");
            $("#statusBoxImage").attr("src", "gfx/page/fail.jpg");
            showStatusBox("fail");  
        }
    },
    error: function(response) {
        $("#statusBoxMessage").html("Fehler! " + response);
        showStatusBox("fail");
    }
});
编辑:我也有一个几乎相同的脚本,我用来编辑博客中的新闻条目,它仍然不起作用,并删除任何变音符号:

$("#submitEditContent").click(function() {

    var content = $("#editEditor").val();
    var s = 0;

    if (target == "pages/news.html" || target == "news.html") {
        target = currentNewsFilename;
        s = 1;
    }

    $.ajax({
        url: "ajax.php",
        method: "POST",
        data: {
            action: "postEdit",
            content: btoa(content),
            target: target
        },
        success: function(response) {
            if (response == "success") {
                if (s == 0) {
                    window.location.replace("index.php?page=" + target);
                } else {
                    window.location.reload();
                }

            } else {
                console.warn(response);
            }
        }
    });

我希望有人可以解释为什么第一个脚本突然停止播放变音符号以及为什么第二个脚本仍然会丢失变音符号。

我使用最新的Chrome浏览器进行了测试。

2 个答案:

答案 0 :(得分:1)

let decoded = atob('PHA+VGhpcyB0ZXh0IGNvbnRhaW5zIHVtbGF1dHMgKMTc1ikuIExldHMgc2VlIGlmIHRoZXkgYXJlIGdldHRpbmcgcmVtb3ZlZC48L3A+')
console.log(decoded)

我认为您的网页上的编码没有任何问题。

这在浏览器中运行得非常好。 它适用于您引用的外部网站,但您需要将编码设置为ISO-8859-1而不是UTF-8。试一试。enter image description here

答案 1 :(得分:1)

由于@Matt Morgans的提示,我解决了这个问题。我们发现一切都工作正常的客户端,我不得不更改服务器端代码。

<强>之前:

$content = $_POST["content"];
$content = stripScript(base64_decode($content));
$content = mb_convert_encoding($content, 'UTF-8', 'OLD-ENCODING');

<强>后:

$content = $_POST["content"];
$content = stripScript(base64_decode($content));
$content = mb_convert_encoding($content, 'UTF-8', 'Windows-1252');

这也有效:

$content = mb_convert_encoding($content, 'UTF-8', 'ISO-8859-1');