2012-02-11 16 views
1

%記号に対してフィルタリングしようとしているPHP文字列内のクエリがあります。 すべてがutf-8です。 文字列に%(たとえば%acheron)が含まれている場合、それは同等のエンティティに変換されます(文字列の%acシーケンスによって解釈される 'not'記号文字になります)。 私はこの文字の入って来る文字列をきれいにすることができるようです/ PHPの文字列をきれいにすることはできません。PHPクリーンな着信文字列(%記号)

私が知ることができる唯一の方法は、rawurlencodeを使用してそれをきれいにすることでしたが、それは駄目な解決策であり、私にとっては他の文字に問題を引き起こすようです。

残りの文字列に影響を与えずにこれらの文字を消去するより効率的な方法はありますか?例えば、私は文字列から%&#(と他のもの)を取り除くが、そうでなければそれをそのまま残す関数を探している。 (preg_replaceが私のために働いていない)

言い換えれば、文字列を受け入れる方法はありますか?

EDIT:GET経由でクエリが入力されていますが、そのことは明確ではありません。 EDIT2:urlecodeまたはrawurlエンコード: %acheronが%ACheronに変換されていますが、それは ^ acheronが%5Eacheronに変換されています(したがって、パターンを使用してクリーニングすることはほとんど不可能です)...

私の質問のnoobishness おかげ ラリー

+0

の配列? –

+0

私はそれをrawurlencodeと似たようにしようとしましたが、どちらかを使用すると%ACheronとして戻ってきますが、入力が^ Acheronの場合は%5Eacheronに変換されます – Larry

+0

どのブラウザを使って%フォーム提出中ですか? –

答えて

1

$文字列=にpreg_replace( "/(%| & |#)を/"、 ''、$文字列)言い訳してください。

これはなんですか?あなたの問題を理解すれば、これはうまくいくはずです。

EDIT:OK、これはあなたが探しているものです:

<?php 
function myUrlEncode($string) { 
    $entities = array('%21', '%2A', '%27', '%28', '%29', '%3B', '%3A', '%40', '%26', '%3D', '%2B', '%24', '%2C', '%2F', '%3F', '%25', '%23', '%5B', '%5D', '%5E'); 
    $replacements = array('!', '*', "'", "(", ")", ";", ":", "@", "&", "=", "+", "$", ",", "/", "?", "%", "#", "[", "]", "^"); 
    return str_replace($entities, $replacements, urlencode($string)); 
} 


$search = myUrlEncode($_GET['id']); 
$search = preg_replace("/(%|&|#)/", '', $search); 

echo $search; 
?> 
+0

これはうまくいきますが、軽いテキストの置換のための正規表現の使用に投票した地方の人々には注意してください。 –

+0

こんにちは、ありがとう、しかし、これは、Webフォームから入力され、スクリプトに到達するまでには、すでに%ac(この場合は)を "not"記号にエンコード/デコードしています。 – Larry

+0

もっと説明してください。何か起こる前にこのチェックを追加しますか?また、それはどのようにデコードされて見えるのですか、デコードされたものは何ですか? – Alice

1

str_replaceは、あなたが探しているものであるようにそれは私に聞こえます。

たとえば

$text = "%acheron"; 
$search = "%"; 
$replace = ""; //or whatever you want to replace it with 
echo str_replace($search, $replace, $text); 

あなたがaswell $searchのための配列を作ることができ、それぞれ最初にそれにurldecode()を実行しているしようとしました$replace

+0

残念なことに、スクリプトで文字列を取得した時点では、それは変換されていないため、それは問題ありません。文字列の%ac部分が "not"記号として入ります。したがって、私はそれをきれいにすることはできません:(おそらく私はこれがWebベースのフォーム(GET) – Larry

関連する問題