ホームページ  >  記事  >  バックエンド開発  >  PHP 中国語 URL エンコードとデコード (urlencode()rawurlencode()_PHP チュートリアル

PHP 中国語 URL エンコードとデコード (urlencode()rawurlencode()_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-21 15:36:441475ブラウズ

詳細な説明は次のとおりです。 ///\
string urlencode (string str)
-_ を除く、この文字列内のすべての非英数字文字は、その後に続く 2 つの文字に置き換えられます。数字は 16 進数として、スペースはプラス記号 (+) としてエンコードされます。このエンコーディングは、WWW フォーム POST データのエンコーディングと同じであり、application/x-www-form-urlencoded メディア タイプと同じエンコーディングです。歴史的な理由により、このエンコードは、スペースをプラス記号 (+) としてエンコードする点で RFC1738 エンコード (rawurlencode() を参照) とは異なります。この関数により、文字列のエンコードと URL のリクエスト部分での使用が容易になり、変数を次のページに渡すことも容易になります。 例 1. urlencode() 例

コードをコピー コードは次のとおりです。

echo ''

注: HTML に一致する変数には注意してくださいエンティティ。 &、©、£ などの文字はすべてブラウザによって解析され、予期される変数名が実際のエンティティに置き換えられます。これは明らかな混乱であり、W3C は数年前からこのことについて人々に警告してきました。参照アドレス: http://www.w3.org/TR/html4/appendix/notes.html#h-B.2.2 PHP は、arg_separator .ini ディレクティブを通じて、パラメータ区切り文字を W3C が推奨するセミコロンに変更することをサポートしています。残念ながら、ほとんどのユーザー エージェントはフォーム データをセミコロン区切り形式で送信しません。より簡単な解決策は、区切り文字として & の代わりに & を使用することです。このために PHP の arg_separator を変更する必要はありません。そのままにして、htmlentities(urlencode($data)) を使用して URL をエンコードします。
例 2. urlencode() と htmlentities() の例

コードをコピーします コードは次のとおりです:

string urlencode ( string str)
文字列を返します。この文字列内の -_ を除くすべての英数字以外の文字は次の文字列に置き換えられます。パーセント記号 (%) の後に 2 桁の 16 進数が続きます。 RFC 1738 で説明されているこのエンコーディングは、リテラル文字が特別な URL 区切り文字として解釈されないように保護し、トランスポート メディア (一部のメール システムなど) で使用される文字変換によって URL 形式が文字化けしないようにすることを目的としています。たとえば、FTP URL にパスワードを含める場合:
例 1. rawurlencode() 例 1

コードをコピーします コードは次のとおりです:
echo '< ;a href="ftp ://user:', rawurlencode('foo @+%/'),
'@ftp.my.com/x.txt">'


; URL を渡したい場合 情報を渡すための PATH_INFO コンポーネント:
例 2. rawurlencode() 例 2


コードをコピーします コードは次のとおりです:
echo '< a href="http://x.com/Department_list_script/',
rawurlencode('sales andmarketing/Miami'), '">'



; デコードするときは、対応するurldecode() と rawurldecode() に応じて、rawurldecode() はプラス記号 ('+') をスペースにデコードしませんが、urldecode() はデコードできます。 詳細な例は次のとおりです。 string urldecode (string str)
指定されたエンコードされた文字列内の任意の %## をデコードします。デコードされた文字列を返します。 例 1. urldecode() の例



コードをコピー
コードは次のとおりです。 $a =explode('&', $QUERY_STRING); ($i < count($a)) {
$b = split('=', $a[$i]);
echo 'パラメータの値 ', htmlspecialchars(urldecode($b[0]));
' は ', htmlspecialchars(urldecode($b[1])), "
n";
$i++;
?>
string rawurldecode ( string str)
文字列を返します、この文字 文字列内のパーセント記号 (%) の後に 2 つの 16 進数が続く場合は、リテラル文字に置き換えられます。
例 1. rawurldecode() 例



コードをコピーします

コードは次のとおりです:


echo rawurldecode('foo%20bar%40baz') // foo bar@baz ?>
ただし、urldecode() と rawurldecode() によってデコードされた文字列は UTF-8 形式でエンコードされることに注意してください。URL に中国語が含まれており、ページ設定が UTF-8 ではない場合は、デコードされた文字列を変換する必要があります。正常に表示できるようになりました!
もう一つ問題があります。つまり、この時点で取得された URL は %%nn n={0..F} の形式ではなく、%unnnn n={0..F} の形式になっています。 urldecode() と rawurldecode () を使用すると正しくデコードできません。正しくデコードするには次の関数を使用する必要があります:
コードをコピー コードは次のとおりです:

function utf8RawUrlDecode ($source)
{
$decodedStr = "";
$len = strlen ($source);
$charAt = substr ($source, $pos, 1); if ($charAt == '%') {
$pos++;
$charAt = substr ($source, $pos, 1);
if ($charAt == 'u') {
// Unicode 文字を取得しました
$pos++;
$unicodeHexVal = substr ($source, $pos, 4);
$entity = "" .= utf8_encode ($entity);
$pos + = 4;
}
else {
// エスケープされた ASCII 文字があります
$hexVal = substr ($source, $pos, 2); ($hexVal));
$pos + = 2;
}
} else {
$decodedStr .= $charAt;
}
return $decodedStr;



http://www.bkjia.com/PHPjc/322095.html

www.bkjia.com

tru​​e

http://www.bkjia.com/PHPjc/322095.html
技術記事

詳細な説明は次のとおりです。 ///\ string urlencode (string str) -_ を除くすべての非英数字がパーセント記号 (%) とそれに続く 2 つの文字に置き換えられた文字列を返します。