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(〇〇〇)
「&」を「&」など記号系を変換したい → htmlエンティティ
- 特殊文字(「"」「<」「>」「&」)をHTMLエンティティに変換
-
echo htmlspecialchars($str); // 出力結果→あいうえおabc012 -_.~&"'<>
- 特殊文字(「"」「<」「>」「&」「'」)をHTMLエンティティに変換
-
echo htmlspecialchars($str, ENT_QUOTES); // 出力結果→あいうえおabc012 -_.~&"'<>
- 適用可能な文字を全てHTMLエンティティ
-
echo htmlentities($str); // 出力結果→あいうえおabc012 -_.~&"'<> // 「'」もHTMLエンティティに変換 → htmlentities($str, ENT_QUOTES) // HTMLエンティティを文字に変換 → html_entity_decode(〇〇〇)
※「htmlspecialchars()」でエンティティにした文字も「html_entity_decode()」で元に戻せる