1

使用 ajaxed 无限滚动时,我无法解码希腊文本。这是我第一次处理非英语数据,但据我了解,每个希腊字符都需要转义,否则 Ajax 会中断尝试发送字符。

我通过使用这个 (PHP) 转义它使其对 Ajax 友好:

function utf8ize($d) {  // Encoding workaround

    if(is_array($d)) {

        foreach ($d as $k => $v) {

            $d[$k] = utf8ize($v);
        }

    } elseif (is_string ($d)) {

        return utf8_encode($d);
    }

    return $d;
}

所以这

Το γράμμα άλφα (ἄλφα) είναι το πρώτο γράμμα του ελληνικού αλφαβήτου。

变成这样:

Το γÏÏάμμα άλφα (ἄλφα) είναι το Ï€Ïώτο γÏάμÎα τοÏÏ ... ÎµÎ»Î»Î·Î½Î¹ÎºÎ¿Ï Î±Î»Ï†Î±Î²Î®Ï„Î¿Ï...。

这就是文本在我的英国语言环境数据库中的原始外观。但现在我不确定如何在前端将其转换回希腊语。

通常我会在后端使用 PHP 的 utf8_encode 并在前端使用 jQuery 的 decodeURIComponent 成功解码非基本拉丁词,如café、fiancé、façade,但是使用希腊语会出现此错误

URIError:URI 格式错误

是否有内置的 jQuery 函数将 utf-8 转换为另一种在前端支持希腊语的格式?

这是它在默认加载时的样子:

在此处输入图像描述

这就是我尝试通过 Ajax 注入相同文本时发生的情况

在此处输入图像描述

4

1 回答 1

1

感谢@Hackerman 和@HarryPehkonen 的评论,我发现了这个问题。

最初的问题是希腊文本也有混合字符的超链接。

例如,希腊链接具有基于拉丁语的域名,但使用希腊语作为语义 slugs

在此处输入图像描述

在 URL 栏中看起来像希腊语,但实际上已经进行了 URL 编码,并且在复制粘贴到文本编辑器时看起来像这样。

https://el.wikipedia.org/wiki/%CE%95%CE%BB%CE%BB%CE%B7%CE%BD%CE%B9%CE%BA%CF%8C_%CE%B1%CE%BB%CF%86%CE%AC%CE%B2%CE%B7%CF%84%CE%BF

最后一部分似乎打破了一切。

所以在样本输入中

Το γράμμα <b >άλφα</b> (<i >ἄλφα&lt;/i>) είναι το πρώτο γράμμα του <a href="https://el.wikipedia.org/wiki/%CE%95%CE%BB%CE%BB%CE%B7%CE%BD%CE%B9%CE%BA%CF%8C_%CE%B1%CE%BB%CF%86%CE%AC%CE%B2%CE%B7%CF%84%CE%BF" title="Ελληνικό αλφάβητο" >ελληνικού αλφαβήτου</a>.

尝试对一个已经包含 URL 编码部分的字符串进行 utf8_encode 然后 json_encode 导致在前端解码时该字符串都不是。

修改我的 utf8ize() 函数来做一个额外的 iconv('UTF-8', 'UTF-8', $d) 解决了这个问题。

function utf8ize($d) {  // Encoding workaround

    if(is_array($d)) {

        foreach ($d as $k => $v) {

            $d[$k] = utf8ize($v);
        }

    } elseif (is_string ($d)) {

       return utf8_encode(iconv('UTF-8', 'UTF-8', $d));
    }

    return $d;
}
于 2017-01-30T18:13:15.980 回答