ホームページ  >  記事  >  バックエンド開発  >  php中国語URLトランスコーディング

php中国語URLトランスコーディング

WBOY
WBOYオリジナル
2016-06-23 14:30:553555ブラウズ


PHP で URL をエンコードするには、urlencode() または rawurlencode() を使用できます。この 2 つの違いは、前者はスペースを '+' としてエンコードするのに対し、後者はスペースを '%20' としてエンコードすることです。ただし、エンコード時に URL の一部のみをエンコードする必要があることに注意してください。エンコードしないと、URL 内のコロンとバックスラッシュもエスケープされます。以下に詳細な説明を示します:

string urlencode (string str)

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

echo ''; 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 '';

?> echo ''; ?>

例 2. rawurlencode() 例 2
または、必要に応じて渡す 情報を渡す URL の PATH_INFO コンポーネント:




デコードするときは、対応する urldecode() と rawurldecode() を使用できます。同様に、rawurldecode() はプラス記号 ('+') をスペースにデコードしませんが、urldecode() は使用できます。 詳細な例を次に示します。

string urldecode (string str)

指定されたエンコードされた文字列内の任意の %## をデコードします。デコードされた文字列を返します。

例 1. urldecode() の例

$a =explode('&', $QUERY_STRING);

while ($i & lt; count ($a)) {
$b = split('=', $a[$i]);
echo 'パラメータの値 ', htmlspecialchars(urldecode($b[0])),
' は ', htmlspecialchars (urldecode ($b[1])), "
n";


パーセント記号 (%) に続く 2 つの 16 進数の文字列がリテラル文字に置き換えられる文字列を返します。 。


例 1. Rawurldecode() の例

echo rawurldecode('foo%20bar%40baz') // foo bar@baz

?& gt;

ただし、urldecode() と rawurldecode() によってデコードされた文字列は UTF-8 形式でエンコードされることに注意してください。URL に中国語が含まれており、ページ設定が UTF-8 ではない場合は、デコードされた文字列を変換する必要があります。正常に表示できるようになりました!

もう 1 つ問題があります。つまり、この時点では、取得された URL は %%nn n={0..F} の形式ではなく、%unnnn n={0..F} の形式になっています。 、urldecode() を使用しても rawurldecode() は正しくデコードできません。正しくデコードするには次の関数を使用する必要があります:

function utf8RawUrlDecode ($source)
{
$decodedStr = "";
$pos = 0;
$len = strlen ($source );
while ($pos < $len) {
$charAt = substr ($source, $pos, 1);
if ($charAt == '%') {
$pos++ ; $ charat = substr($ source、$ pos、1);
4);

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。