使用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转换为另一种在前端支持希腊语的格式?
这是默认加载的外观:
当我尝试通过Ajax注入相同的文本时会发生这种情况
答案 0 :(得分:1)
由于@Hackerman和@HarryPehkonen的评论,我想出了这个问题。
最初的问题是希腊文本也有混合字符的超链接。
例如,希腊语链接具有基于拉丁语的域名,但使用希腊语作为semantic slugs。
在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>.