Php HTML5和神秘的字符集

Php HTML5和神秘的字符集,php,jquery,html,Php,Jquery,Html,这是我在SO的第一篇帖子,温柔一点 我目前正在开发一个利用新的HTML5 target.result的web应用程序。它允许我读取文本文件的内容,而无需将任何内容上传到服务器 我遇到的问题是关于字符集。因此,通常web内容是通过页面本身作为博客文章、评论或任何符合该页面字符集和数据库配置的内容生成的。然而,这个新的HTML5功能允许我们在不知道文档的原始字符集或格式的情况下获取文本文件内容 在ajax发布数据之前对数据进行编码是有意义的,因此我尝试了许多不同的方法将文本转换为utf-8,也尝试了

这是我在SO的第一篇帖子,温柔一点

我目前正在开发一个利用新的HTML5 target.result的web应用程序。它允许我读取文本文件的内容,而无需将任何内容上传到服务器

我遇到的问题是关于字符集。因此,通常web内容是通过页面本身作为博客文章、评论或任何符合该页面字符集和数据库配置的内容生成的。然而,这个新的HTML5功能允许我们在不知道文档的原始字符集或格式的情况下获取文本文件内容

在ajax发布数据之前对数据进行编码是有意义的,因此我尝试了许多不同的方法将文本转换为utf-8,也尝试了各种数据类型。我已经走过了整个图表集之路,htaccess,meta,内容类型

毫不奇怪,这么多人发现使用不同字符集、ASCII、不同语言和ajax数据类型对URI进行编码、解码的整个过程如此痛苦

我认为社区可以从一个解决方案中获益,该解决方案可以从任何类型的文本文档中获取文本,而不管其字符集或格式如何,使用任何语言,并通过ajax请求响应以其原始形式显示文本,另外还增加了utf-8。没有奇怪的符号,没有人能读懂,最终结束那些钻石问号

这是我现在的一个例子

复制这篇新闻文章:

…并将其粘贴到此处:

无论我使用什么配置,我都无法在底部输出中正确显示撇号,似曾相识

那么谷歌是如何用谷歌翻译解决这个问题的呢

编辑:值得注意的是,ABC新闻和瑞士工具转换器的字符集都是utf-8。您可以清楚地看到,从utf-8到utf-8的转换也会产生奇怪的符号,即使它们是完全相同的字符集

EDIST:2好的,所以我设法拼凑了一个快速原型并将其上传到远程服务器。你可以在

这是通过ajax发布文本的javascript:

function handleFileSelect(evt) {

evt.stopPropagation();
evt.preventDefault();

var files = evt.dataTransfer.files;

for (var i = 0, f; f = files[i]; i++) {
    var reader = new FileReader();
    reader.onload = (function(theFile) {
        return function(e) {
            var insertText = e.target.result;
            var fields = 'text=' + insertText;
            $.ajax({
                type: "POST",
                url: "ajax.php?action=addfile",
                data: fields,
                dataType: "json",
                complete: function (data) {
                    if (data.responseJSON.message) {
                        $( "#modal-message h4" ).replaceWith( "<h4 class='modal-title text-center'>"+data.responseJSON.message+"</h4>" );
                    }
                    if (data.responseJSON.report) {
                        $( "#report_box" ).replaceWith( '<div id="report_box">'+data.responseJSON.report+'</div>' );
                    }
                    if (data.responseJSON.import) {
                        $('#output_box').replaceWith('<div id="output_box" class="hidden-print">'+data.responseJSON.import+'</div>');
                    }
                    $('#modal-message').modal('show');
                    setTimeout(function() {$('#modal-message').modal('hide');}, 3000);
                }
            });


        };
    })(f);

    reader.readAsText(f);
}
}
功能手柄文件选择(evt){
evt.stopPropagation();
evt.preventDefault();
var files=evt.dataTransfer.files;
for(var i=0,f;f=files[i];i++){
var reader=new FileReader();
reader.onload=(函数(文件){
返回函数(e){
var insertText=e.target.result;
变量字段='text='+插入文本;
$.ajax({
类型:“POST”,
url:“ajax.php?action=addfile”,
数据:字段,
数据类型:“json”,
完成:功能(数据){
if(data.responseJSON.message){
$(“#模式消息h4”).replace为(“+data.responseJSON.message+”);
}
if(data.responseJSON.report){
$(“#报告框”)。替换为(“”+data.responseJSON.report+“”);
}
if(data.responseJSON.import){
$(“#输出框”)。替换为(“”+data.responseJSON.import+“”);
}
$('modal message').modal('show');
setTimeout(function(){$('#modal message').modal('hide');},3000);
}
});
};
})(f) );
reader.readAsText(f);
}
}

由于没有人回答这个问题,我将根据我为一个不理解utf-8但却生成html的遗留应用程序所做的即时翻译的类似工作冒险给出一个答案

它只涉及创建一个从有问题的字符代码到它的html实体等价物的映射表。ñ=>ñ;例如下面是一些示例代码

function createEntities(source) {
    var map = [
       { key:"á", value: "<b>&aacute;</b>"},
       { key:"ñ", value: "<b>&ntilde;</b>"},
        { key:"ó", value: "<b>&oacute;</b>" },
       { key:"'", value: "<b>&apos;</b>" }
    ];
    var target = source;
    for ( prop in map ) {
       var pair = map[prop];
       target = target.replace(pair.key,pair.value)
    }
    return target;
}
函数createEntities(源){
变量映射=[
{键:“á”,值:“á;”},
{键:“ñ”,值:“ñ;”},
{键:“ó”,值:“ó;”},
{键:“”,值:“&apos;”
];
var目标=来源;
用于(地图中的道具){
变量对=映射[prop];
target=target.replace(pair.key,pair.value)
}
回报目标;
}

这里有一个例子来证明这一点。当然,您需要设置适当的映射。

当我将两者都设置为raw时,它似乎可以工作。你能在你的应用程序中显示一些失败的代码吗?嗨,戴夫。是的,但据我所知,ajax不使用原始数据,如果我没有弄错的话,它的默认字符集是utf-8。如果我可以通过ajax以原始格式发送和接收数据,那将非常棒,但遗憾的是,它总是以某种方式编码。问题在于不知道文本的编码来源,然后将其编码为utf-8而没有问题。@user3743250向我们展示一些代码,例如。对于从文本文件中获取文本,社区受益于所有非传统文本文件都应该包含的内容。没有钻石问号,我一定会调查的。虽然我不太确定如何将此应用到我的代码中…感谢您的回答。这是我害怕的,但我开始认为这是唯一的办法。所以,我需要一张全世界每种语言的所有有问题字符的地图。有没有地方可以下载这些角色的预定义地图?