3

バックスラッシュを「.-。」などの別の記号に置き換えるのに苦労しています。'C \ xampp \ etc'などの文字列を送信できなかったため、バックスラッシュの位置を示すためだけに使用します。GET変数としてURLを介して、最初にその文字列のバックスラッシュを別の記号に置き換え、次にurlを介して送信し、それを処理するPHPファイルのバックスラッシュに戻します。そのような文字列をURL経由で送信するより良い方法はありますか?次のようなスクリプトを試してみると、

$tmp_name = preg_replace("\", ".-.", $_FILES['uploadfile']['tmp_name']);

\は区切り文字としても使用されるため、phpエラーになります。

誰かがこれについて私を助けることができますか?

前もって感謝します!

ところで、URLを介して完全な配列を送信できれば、この問題全体は解決されますが、それは不可能だと思いますか?

4

4 に答える 4

4

preg_replaceで使用される正規表現は、区切り文字のペアで囲む必要があります。また、次\\\の代わりに使用してみてください\

$tmp_name = preg_replace("{\\\}", ".-.", $_FILES['uploadfile']['tmp_name']);

編集:

置換を元に戻すには、次のようにします。

$str = preg_replace('{\.-\.}',"\\",$str);

.リテラルドットに一致させるには、をエスケープする必要があります。

于 2010-03-20T10:30:26.143 に答える
4

urlencode()/を使用しますurldecode()

echo urlencode('C:\xampp\etc'); // C%3A%5Cxampp%5Cetc

ところで:これは巨大なセキュリティ上の欠陥のように聞こえます(リクエストによって絶対パスを送信します)


PS:preg_replace()正規表現用です。str_replace()次回お試しください。

于 2010-03-20T10:40:37.960 に答える
1

ところで、URLを介して完全な配列を送信できれば、この問題全体は解決されますが、それは不可能だと思いますか?

簡単だ。PHP:

$url = 'http://example.com/?array=' . urlencode(serialize($array)); // html
$array = unserialize($_GET['array']); // server side

またはJavascript:

url = "http://example.com/?array=" + encodeURIComponent(JSON.stringify(array)); // client
$array = json_decode($_GET['array']); // server

(Javascriptの場合、encodeURIComponentが正しいかどうかを調べる必要があり、公式のJSONライブラリも必要です)

于 2010-03-20T10:52:59.350 に答える
0

正規表現を使用していない場合(使用していない場合)、str_replace代わりに次を使用する必要があります。

$tmp_name = str_replace('\\', '.-.', $_FILES['...']);

\別のでエスケープする必要があることに注意してください\(そうでない場合は、次のをエスケープします')。

区切り文字エラーについては、たとえば正規表現を区切り文字で囲む必要があります/foo//は区切り文字、fooはパターン)。ただし、繰り返しになりますが、正規表現を使用したり心配したりする必要はありません。

于 2010-03-20T10:41:35.590 に答える