2011-01-29 9 views
0

私のウェブサイトからデータを取得するリクエストを投稿すると中华武魂のようなデータベースに文字列があります%E4%B8%AD%E5%8D%8E%E6%AD%A6%E9%AD%82という形式でデータを取得していますURLENCODEDデータをPHPでUTF-8に変換

使用可能な形式に戻すには、どのようなデコード手順が必要ですか? ユーザインプットを掃除して、SQLインジェクション攻撃を試みないようにしますか? (エスケープ文字列の前または後にエンコード?)

編集:私がしようとすると、SQL文で使用するとき、実際に作品

rawurldecode(); // returns "中åŽæ­¦é­‚" 
urldecode();  // returns "中åŽæ­¦é­‚" 


public function utf8_urldecode($str) { 
    $str = preg_replace("/%u([0-9a-f]{3,4})/i","&#x\\1;",urldecode($str)); 
    return html_entity_decode($str,null,'UTF-8'); 
} 
// returns "中åŽæ­¦é­‚" 

...。

私はUTF-8のヘッダを指定せずにechodie();をやっていたので、私は(したがって、私はそれがラテン語と私に読んでいたと思います)の助けを

おかげだと思います!

+2

出力にはUTF-8を使用していないようですが、Windows-1252は使用しているようです。 – Gumbo

答えて

2

あなたのデータが実際にそのパーセントエンコード形式で、あなただけのrawurldecodeを呼び出す必要があり:

$data = '%E4%B8%AD%E5%8D%8E%E6%AD%A6%E9%AD%82'; 
$str = rawurldecode($data); 

これは、既にデータがUTF-8でエンコードされていればよい:(U + 4E2D)はエンコードされていますUTF-8のバイトシーケンス0xE4B8ADを使用し、パーセント符号化を使用する場合は%E4%B8%ADでエンコードされます。

あなたの出力が期待どおりではないように見えるのは、おそらく出力がUTF-8ではなくWindows-1252の間違った文字エンコーディングで解釈されているからです。 Windows-1252では0xE4がäを表し、0xB8は¸を表し、0xADはåを表します。だからspecify the output character encoding properlyにしてください。

1

使用PHPのurldecode: http://php.net/manual/en/function.urldecode.php

あなたはここでの選択肢があります。urldecodeまたはrawurldecodeを。

urlencodeを使用して文字列をエンコードした場合は、スペースの処理方法のためにurldecodeを使用する必要があります。 urlencodeは空白を+に変換しますが、rawurlencodeと同じではありません。

関連する問題