1

搜索我的应用程序的未捕获异常日志( 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 说它格式错误时)。

提前致谢!

4

1 回答 1

1

%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...
于 2013-01-28T10:16:12.107 回答