gpt4 book ai didi

php - url 编码的奇怪问题

转载 作者:行者123 更新时间:2023-11-28 02:28:15 24 4
gpt4 key购买 nike

搜索我的应用程序的未捕获异常日志(js -> php -> vb6 dll)我注意到一个奇怪的错误:

file: /displaywords_GET.php?GreekWord=%E1%ED%E8%F1%F9%F0%EF%EC%DE%ED%E1%F2&selectedRes=1 # <b>Source:</b> mydll<br/><b>Description:</b> Invalid procedure call or argument # Variables:
# Array
(
[GreekWord] => ανθρωπομήνας
[selectedRes] => 1
)

因此对于给定的参数,.dll 中会发生异常。我自己在应用程序中输入特定单词进行了测试,没有出现错误。然后我测试了一下,直接在地址栏输入编码后的URL,结果重现了错误。所以为了看看编码是否有问题,我在javascript中做了

encodeURIcomponent("ανθρωπομήνας")

结果是:

%CE%B1%CE%BD%CE%B8%CF%81%CF%89%CF%80%CE%BF%CE%BC%CE%AE%CE%BD%CE%B1%CF%82

这与上面 php 日志中的 GET 参数有很大不同。然后我尝试解码 url get 参数,如 php 文件中所示:

decodeURIcomponent("%E1%ED%E8%F1%F9%F0%EF%EC%DE%ED%E1%F2")

JavaScript 表示:URI 序列格式错误。为什么会出现这种情况?显然,应用程序崩溃是因为特定的 URL 参数格式错误,而不是正确的。

现在,我的问题是,如何查看编码的字符串是正确的还是损坏的? (虽然我不确定为什么 php 似乎在日志中正确地解码了它,而 javascript 却说它格式错误)。

提前致谢!

最佳答案

%E1%ED... 是 ISO-8859-7 字符集中表示的字符串的 URL 编码。在对字节进行 URL 编码之前,您需要转换为 UTF-8 编码,因为 JavaScript 只能处理 UTF-8 字符串。

$word = 'ανθρωπομήνας';
var_dump(urlencode($word)); // %E1%ED%E8%F1%F9...

$utf8word = iconv('ISO-8859-7', 'UTF-8', $word);
var_dump(urlencode($utf8word)); // %CE%B1%CE%BD...

关于php - url 编码的奇怪问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14559564/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com