すごい遠回りした。結論から書くと、「base64エンコード」がそれです。
Webアプリケーションで使用するなどでURLのクエリストリング内で使うような場合は「base64urlエンコード」を使いましょう。(base64エンコードしたものを更にurlencodeしても良いですが…)
これはPHP組み込み関数には存在しないので自分で定義。
function base64url_encode($data) {
return rtrim(strtr(base64_encode($data), '+/', '-_'), '=');
}
function base64url_decode($data) {
return base64_decode(str_pad(strtr($data, '-_', '+/'), strlen($data) % 4, '=', STR_PAD_RIGHT));
}
(PHP: base64_encode - Manual のコメント欄より引用)
以上。

なぜこれをしたかったかと言うと、、base64url_encode()のためなのです。
base64url_encode()はオプション指定なしのデフォルトだとbase64エンコードしたものを返すようなのだが、base64エンコードされた文字列の中に、「+」とか「/」が入っていて、これをURLのクエリストリングに使おうものなら不具合の元となるわけだ。
で、ググったところ某質問サイトがヒットして、そこで『base64url_encode()のオプション指定で生データを返すようにして、独自にエンコードすればええんやで』という回答があって、なぁるほど。となったわけです。
そこでは例としてbin2hex()を使っていたような気がする。
んで、それでは文字列が長くなりすぎるだろーなー、
16進よりもっと大きな進数なら短くできるよねー、
で、URLに入れても問題ない文字は、数字+アルファベット大文字小文字+記号3字の計65文字。
16の倍数である64進数にすればええんやないか?
っと思ったわけです。
64進数4桁で64の4乗までを表すことができる。
つまり、64の4乗は256の3乗であるから、バイナリ文字列3文字分を64進数4桁で表すことができるよねー。
っちゅうわけでそんな処理をする関数を作った。作ったわけだが…

その後どうやって辿り着いたか忘れたが、これを見つけたときの衝撃ったら…
URLアプリケーションのための変形 Base64
('base64url' encoding)

わしがやろうとしとったことそのままやんかーいっ!
ああ、なんという徒労感…orz

というお話。