検索クエリを入力してフォームをsearch.php?query=your query
に送信した検索ページを作成しています。どのようなPHP関数が最高で、私は検索クエリをエンコード/デコードするために使うべきですか?PHPでURLを正しくエンコードするには?
答えて
URIクエリでは、urlencode
/urldecode
を使用します。それ以外の場合はrawurlencode
/を使用してください。
urlencode
とrawurlencode
との差が
rawurlencode
は(空間を用いて符号化された普通Percent-Encodingに従ってエンコードしながら
urlencode
は(空間は+
で符号化された)application/x-www-form-urlencodedに従ってコードしていることです%20
)。
* application/x-www-form-urlencoded *は、 * Percent-Encoding *は、HTMLフォームデータのエンコードにのみ適用されます。 – Gumbo
どのエンコーディングがより優れているか、form-urlencodedまたはpercentですか? –
@ Click Upvote:そのように比較することはできません。 * application/x-www-form-urlencoded *形式は、スペースが '%20'ではなく' + 'でエンコードされていることを除いて* Percent-Encoding *形式です。それに加えて、* application/x-www-form-urlencoded *はフォームデータをエンコードするために使用され、* Percent-Encoding *はより一般的な使い方をしています。 – Gumbo
狡猾に名前が付けられたurlencode()およびurldecode()。
ただし、と$_GET
に表示される変数にurldecode()
を使用する必要はありません。
狡猾に名前が付けられた' rawurlencode'と 'rawurldecode' ... –
これは私の使用例ですが、例外的な量のエンコーディングが必要です。たぶんあなたはそれが考案されたと思うかもしれませんが、私たちはこれを生産段階で実行します。偶然、これはすべてのタイプのエンコーディングをカバーするので、私はチュートリアルとして投稿しています。
ユースケース記述
誰かが私たちのウェブサイト上でのプリペイドギフトカード(「トークン」)を買いました。トークンには対応するURLがあります。この顧客は他の人に電子メールで連絡したいと考えています。私たちのウェブページには、それを可能にするmailto
リンクが含まれています。
PHPコード
// The order system generates some opaque token
$token = 'w%a&!e#"^2(^@azW';
// Here is a URL to redeem that token
$redeemUrl = 'https://httpbin.org/get?token=' . urlencode($token);
// Actual contents we want for the email
$subject = 'I just bought this for you';
$body = 'I just bought a widget for you. Please enter your shipping details here: ' . $redeemUrl;
// A URI for the email as prescribed
$mailToUri = 'mailto:?subject=' . rawurlencode($subject) . '&body=' . rawurlencode($body);
// Print an HTML element that links to that page
echo '<a href="' . htmlspecialchars($mailToUri) . '">Email your friend</a>';
注:上記のあなたがtext/html
文書に出力している前提としています。出力メディアのタイプがtext/json
の場合は、出力のエンコーディングがjson_encode()
で処理されるため、単に$retval['url'] = $mailToUri;
を使用してください。
テストケース
- PHPテストサイト上のコードを実行します(は、私がここで言及すべき標準的なものがある?)
- を送る電子メールをリンク
- をクリック
- メールを受け取る
- このリンクをクリックしてください
あなたは表示されるはずです。
"args": {
"token": "w%a&!e#\"^2(^@azW"
},
そして、もちろん、これは上記$token
のJSON表現です。
問題が発生しましたか?ブラウザーとPHPはこれを自動的に処理する必要があります(例えば、テキストフィールドに 'foo bar'を入れ、URLに' foo + bar'を作成します)。 –
@Felix私は 'file_get_contents'を使ってサーチャースクリプトを呼び出すつもりです –