jQuery / Ajax - 解码非拉丁文数据;如何应对逃避希腊人的角色

时间:2017-01-30 14:55:50

标签: jquery ajax non-latin

使用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;
}

所以这个

  

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

成为这个:

  

ÎÎÎÎÏÏÎÎÎÎÎÎÎÎÎÎÎÎλÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎ   γÏÎÎÎÎÎÎααÏÎÎÎÏÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÏÏÎÎÏÏÎÎÏÎÎÎ.......

这是我的UK-locale数据库上的文本原始文件。但现在我不确定如何将它转换回前端的希腊语。

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

  

URIError:URI格式错误

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

这是默认加载的外观:

enter image description here

当我尝试通过Ajax注入相同的文本时会发生这种情况

enter image description here

1 个答案:

答案 0 :(得分:1)

由于@Hackerman和@HarryPehkonen的评论,我想出了这个问题。

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

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

enter image description here

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

<select id="my_select">
<option id=1>Option 1</option>
<option id=2>Option 2</option>
<option id=3>Option 3</option>
</select>

这是最后一部分似乎打破了局面。

所以在样本输入中

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

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

修改我的utf8ize()函数以执行额外的iconv(&#39; UTF-8&#39;,&#39; UTF-8&#39;,$ d)解决了这个问题。

Το γράμμα <b >άλφα</b> (<i >ἄλφα</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>.