2017-03-03 4 views
1

私は、「%の87123」としてエンコードされた文字列を持っています。その文字列を表示すると、 "123"にデコードする必要があります。私のコードは次のようなものです:PHPでいくつかの特殊文字をデコードするにはどうすればいいですか?

$code = '%87123'; 
echo urldecode($code); 
die; 

私はrawurldecode、にhtmlentities、iconvを、urldecode、のような多くの異なる機能を試してみましたし、他の多くしています。 誰かがこれを助けることができる場合。 ありがとうございました。

+1

ないあなたは、その文字列があなたの期待にデコード得ることを期待する理由を確認してください... 'でurlencode( '‡123')'私は '%E2%で80%のA1123'を取得... – arkascha

答えて

3

これは、標準のUTF-8エンコーディング(現在は一般的にウェブ環境で使用されています)ではなく、旧式のMS-Windows独自のWindows-1252エンコーディングのURLでエンコードされたバージョンのようです。それは確かにまだいくつかのMS-Windows版で使用されている、それはISO-8859-1またはISO-8859-15とほぼ同じですが、MSは少し互換性がないことを試みるために、典型的な。

<?php 
var_dump(urlencode('‡123')); 
var_dump(urldecode('%87123')); 
var_dump(iconv('Windows-1252', 'UTF-8', urldecode('%87123'))); 

出力は次のとおりです:

string(12) "%E2%80%A1123" 
string(4) "�123" 
string(6) "‡123" 

におけるだから、復号結果これで、この簡単なスクリプトの例を見てみましょう

...ことは周知の戦略の結果に苦しみます Windows-1252でエンコードされた文字列として解釈することができるもの。そうであれば、それをstandatd UTF-8エンコーディングに変換すると、期待通りの結果が得られます。

あなたの状況は、おそらく、そのMS内部エンコーディングでエンコードされた文字列が、記録されたPHPので何とか魔法それはそのデコード仕事をしないと、無効なUTF-8エンコードされた文字列で結果を提供することを推測することはできません。どのエンコーディングを想定するべきかPHPに伝えなければなりません。それを自動的に検出することは不可能です。

+0

をしようとありがとうございました!!!わたしにはできる。ただ一つの質問。あなたはこのキャラクターセットについて知りたがっていますか? – Khushal

+0

私は、...具体的には無数のAPI、システム、ワークフローを介したデータ交換でかなりの経験を得ました;-)助けることができる聞いて喜ん:ヨーロッパ各地の科学図書館の環境では、歴史的に成長したデータ収集が...それは、あなたが突然あなたの玄関先で見つけたあらゆる種類のエキゾチックなもの。あなたは興味をそそられ、時を過信しています。その習慣は特に、MS-Windowsシステムが動作する瞬間に注意を喚起する... – arkascha

関連する問題