ラボ > PHP:PATHやURL関連

PHPでURLエンコードとデコード、エンティティとその逆

エンコード、エンティティがいくつかあって何が何だか分からない。urlencode()・ urldecode()、base64_encode()・ base64_decode()、htmlspecialchars()・htmlentities()・html_entity_decode()。

作成日:2017-12-07, 更新日:2018-03-20

基本

・URLのパラメータを変換したい → URLエンコード
・メール関連 → base64エンコード
・「&」を「&」など記号系を変換したい → htmlエンティティ

▼変換する文字列

$str = 'あいうえおabc012 -_.~&"' . "'" . '<>';
// あいうえおabc012 -_.~&"'<>

URLのパラメータを変換したい → URLエンコード

URLエンコード / urlencode(), urldecode()
echo urlencode($str);
// 出力結果→%E3%81%82%E3%81%84%E3%81%86%E3%81%88%E3%81%8Aabc012+-_.%7E%26%22%27%3C%3E
// デコード → urldecode(〇〇〇)
RFC 3986に基づきURLエンコード / rawurlencode(), rawurldecode()
echo rawurlencode($str);
// 出力結果→%E3%81%82%E3%81%84%E3%81%86%E3%81%88%E3%81%8Aabc012%20-_.~%26%22%27%3C%3E
// デコード → rawurldecode(〇〇〇)

メール関連 → base64エンコード:MIME base64方式

MIME base64方式でエンコード / base64_encode(), base64_decode()
echo base64_encode($str);
// 出力結果→44GC44GE44GG44GI44GKYWJjMDEyIC1fLn4mIic8Pg==
// デコード → base64_decode(〇〇〇)

「&」を「&amp;」など記号系を変換したい → htmlエンティティ

特殊文字(「"」「<」「>」「&」)をHTMLエンティティに変換
echo htmlspecialchars($str);
// 出力結果→あいうえおabc012 -_.~&amp;&quot;'&lt;&gt;
特殊文字(「"」「<」「>」「&」「'」)をHTMLエンティティに変換
echo htmlspecialchars($str, ENT_QUOTES);
// 出力結果→あいうえおabc012 -_.~&amp;&quot;&#039;&lt;&gt;
適用可能な文字を全てHTMLエンティティ
echo htmlentities($str);
// 出力結果→あいうえおabc012 -_.~&amp;&quot;'&lt;&gt;
// 「'」もHTMLエンティティに変換 → htmlentities($str, ENT_QUOTES)
// HTMLエンティティを文字に変換 → html_entity_decode(〇〇〇)

※「htmlspecialchars()」でエンティティにした文字も「html_entity_decode()」で元に戻せる

サンプル

URLエンコードとデコードのサンプル