douchen7555 2019-02-16 13:20
浏览 59
已采纳

Javascript encodeURI返回意外值

I have a problem URL-encoding a text with javascript. I am in Germany, where we have these "Umlaute" (ÄÖÜ), and these letters make some problems.

An online encoder/decoder returned the following results for the word "Äpfel" (apples).

Äpfel >>> url-encode >>> %C3%84pfel

%C3%84pfel >>> url-decode >>> Äpfel

For testing, I created the following php.file (poc.php) with no php-content, just the javascript:

<script type="text/javascript">
    var t = "Äpfel";
    t = encodeURI(t);
    alert(t);
    t = decodeURI(t);
    alert(t);
</script>

The first alert returns "%EF%BF%BDpfel", which differs from the result of the online encoder.

The second alert returns "�pfel" (yes, the diamond with the "?").

It seems that javascript cannot decode the text it just encoded.

I guess the cause of this behaviour is somewhere in the PHP settings. When I just rename the file from "poc.php" to "poc.html" the encoding is correct and the alerts return the same results as the online encoder/decoder.

When I check the current encoding, javascript and php return "utf-8".

In my "real" project I have a ".js" file included in my php-file (with the same problem).

<script type="text/javascript" src="scripts/functions.js"></script>

Has anybody an idea what causes this behaviour?

  • 写回答

1条回答 默认 最新

  • duanpo1498 2019-02-16 15:32
    关注

    The weird byte stream %EF%BF%BD you're receiving is utf-8 version of the Unicode replacement character, that is, literally the � symbol.

    The Javascript portion can url-decode the text it just url-encoded, it was just asked to encode the symbol for a missing symbol.

    So: some part of your system is not using utf-8, but some other character set instead, and there's an unnecessary conversion done. My guess is that the file is encoded in latin-1, aka. ISO 8859-1, and PHP tries to read it as if it was UTF-8, converting the unrecognized character 0xc4 ('Ä' in latin-1) to the replacament character symbol.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 矩阵加法的规则是两个矩阵中对应位置的数的绝对值进行加和
  • ¥15 活动选择题。最多可以参加几个项目?
  • ¥15 飞机曲面部件如机翼,壁板等具体的孔位模型
  • ¥15 vs2019中数据导出问题
  • ¥20 云服务Linux系统TCP-MSS值修改?
  • ¥20 关于#单片机#的问题:项目:使用模拟iic与ov2640通讯环境:F407问题:读取的ID号总是0xff,自己调了调发现在读从机数据时,SDA线上并未有信号变化(语言-c语言)
  • ¥20 怎么在stm32门禁成品上增加查询记录功能
  • ¥15 Source insight编写代码后使用CCS5.2版本import之后,代码跳到注释行里面
  • ¥50 NT4.0系统 STOP:0X0000007B
  • ¥15 想问一下stata17中这段代码哪里有问题呀