首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将ajax响应从windows-1255转换为UTF8

将ajax响应从windows-1255转换为UTF8
EN

Stack Overflow用户
提问于 2012-05-01 16:09:05
回答 2查看 1.4K关注 0票数 2

我使用Ajax调用来接收希伯来文的响应。结果来自不同的站点,并被windows-1255编码。我的页面是UTF-8。答复如下:

代码语言:javascript
复制
îéãò ìî÷áì  áæ÷ äçáøä äéùøàìéú  àéï 

我发现了这个网站:http://kanjidict.stc.cx/recode.php使用windows-1255到UTF-8 (+标记最后一个复选框),结果是完美的。问题是我如何在PHP上做到这一点?

我做的每一件事都会变成垃圾。

代码语言:javascript
复制
$data = 'îéãò ìî÷áì  áæ÷ äçáøä äéùøàìéú àéï  ';
echo mb_detect_encoding($data);

结果在UTF-8中(可能是UTF-8,因为我的php文件是utf-8)。

我实际上需要这样的结果:

代码语言:javascript
复制
מידע למקבל  בזק החברה הישראלית אין 

如果我试着说:

代码语言:javascript
复制
echo iconv("WINDOWS-1255", "UTF-8", "îéãò ìî÷áì  áæ÷ äçáøä äéùøàìéú àéï  ");

我明白了:

代码语言:javascript
复制
ֳ®ֳ©ֳ£ֳ² ֳ¬ֳ®ֳ·ֳ¡ֳ¬ ֳ¡ֳ¦ֳ· ֳ₪ֳ§ֳ¡ֳ¸ֳ₪ ֳ₪ֳ©ֳ¹ֳ¸ֳ ֳ¬ֳ©ֳ÷ ֳ ֳ©ֳ¯ 

怎么一回事?我怎么能得到希伯来语的结果?

谢谢!!

EN

回答 2

Stack Overflow用户

发布于 2012-05-01 16:36:26

当您有一个包含此内容的文件时:

代码语言:javascript
复制
echo iconv("WINDOWS-1255", "UTF-8", "îéãò ìî÷áì  áæ÷ äçáøä äéùøàìéú àéï  ");

在保存文件本身的编码中,这是非常重要的。PHP的字符串不关心编码,它们只是作为字节数组工作。因此,如果您使用UTF-8编码保存这样的文件,那么字符串当然会保存在UTF-8中,因为它在UTF-8中,不能从WIN1255转换它。

我的建议是: 1)从服务器检索字符串的原始编码,2)将其保存到一个文件中,就像使用该文件进行实验一样,因为这样您就可以确定您只处理原来的数据。一旦您试图复制并粘贴到某个地方,您可能会更改该东西的编码。

另外,用十六进制编辑器查看数据也不是个坏主意,这样您就可以肯定地看到文件中存储的内容。

无论如何,您所说的尝试尝试做的似乎是正确的:从服务器获取WIN-1255数据,然后调用iconv(.)在它上,现在它在UTF-8中,将它输出到一个HTML页面(当然,该页面有一个<meta>表示它在UTF-8中)。

票数 2
EN

Stack Overflow用户

发布于 2012-05-01 19:17:16

重新编码可能是不必要的。您只需使用声明的win-1255编码来提供相同的内容,并让浏览器处理它。

如果您想重新编码,您需要在服务器上这样做:

从字符串的远程server.

  • Determine编码(从http头或html headers).

  • Convert编码到utf-8,如果necessary.

  • Return新值具有正确的utf-8编码声明的necessary.

  • Return新值)获取字符串。

您可能在步骤4中缺少了Content-Type: text/html;charset=utf8头,这就是为什么您的echo iconv(...)看上去不对。

下面是一个示例函数,可以在常见情况下为您执行步骤1-3:

代码语言:javascript
复制
function getUrlAsUtf8($url) {
    $s = file_get_contents($url);
    if ($s) {
        $contenttype = preg_grep('/content-type:(?:(?:\r\n)?[ \t]+)*+((?:(?:(?:\r\n)[ \t]+)|[ \t\x20-\x7e\x80-\xff])*)/i', $http_response_header);
        $inputcharset = null;
        foreach ($contenttype as $ct) {
            if (preg_match('/charset\s*=\s*(.*?)(?:$|;)/i', $ct, $matches)) {
                $inputcharset = strtolower($matches[1]);
            }
        }
        if ($inputcharset and $inputcharset!=='utf-8') {
            $s = mb_convert_encoding($s, 'utf-8', $inputcharset);
        }
    }
    return $s;
}

echo getUrlAsUtf8('http://example.org');
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10400566

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档