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 パラメータとは大きく異なります。次に、phpファイルに見られるように、url getパラメーターをデコードしようとしました:

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

そしてjavascriptは言う:不正な形式のURIシーケンス。なぜこうなった ?特定の URL パラメータの形式が適切ではなく不正であるため、明らかにアプリケーションがクラッシュします。

さて、私の問題は、エンコードされた文字列が適切なものか破損したものかをどのように確認できますか? ( javascript が不正な形式であると言っているのに、php がログでそれを正しくデコードしているように見える理由はわかりません)。

前もって感謝します!

4

1 に答える 1

1

%E1%ED...ISO-8859-7 文字セットで表される文字列の URL エンコードです。JavaScript は UTF-8 文字列でのみ機能するため、バイトを URL エンコードする前に 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 に答える