2023年6月11日日曜日

sedで簡易URLエンコード

需要がどれだけあるかわかりませんが、使えたら使ってください。POSIX sedでもGNU sedでも動作します。

sed -r \
	-e 's/%/%25/g' \
	-e 's/\$/%24/g' -e 's/\(/%28/g' -e 's/\)/%29/g' -e 's/\*/%2A/g' -e 's/\+/%2B/g' -e 's/\//%2F/g' -e 's/\?/%3F/g' -e 's/\[/%5B/g' -e 's/\]/%5D/g' \
	-e 's/!/%21/g' -e 's/#/%23/g' -e 's/&/%26/g' -e "s/'/%27/g" -e 's/,/%2C/g' -e 's/:/%3A/g' -e 's/;/%3B/g' -e 's/=/%3D/g' -e 's/@/%40/g' \
	-e 's/ /+/g'

関数化すれば、シェルスクリプト内でパイプ的に使えるのでまあまあ便利かも?

function urlencode() {
	sed -r \
		-e 's/%/%25/g' \
		-e 's/\$/%24/g' -e 's/\(/%28/g' -e 's/\)/%29/g' -e 's/\*/%2A/g' -e 's/\+/%2B/g' -e 's/\//%2F/g' -e 's/\?/%3F/g' -e 's/\[/%5B/g' -e 's/\]/%5D/g' \
		-e 's/!/%21/g' -e 's/#/%23/g' -e 's/&/%26/g' -e "s/'/%27/g" -e 's/,/%2C/g' -e 's/:/%3A/g' -e 's/;/%3B/g' -e 's/=/%3D/g' -e 's/@/%40/g' \
		-e 's/ /+/g'
}
echo "a*a + b*b != c*c" | urlencode

制御文字やASCII範囲外の文字には対応していないので限定的にしか使えませんが、場合によってはまあ使えるんじゃないかと思います。

ちゃんとしたものが必要なら、JavaScriptなりPHPなり専用の関数を備えた言語で書くのが確実です。

0 件のコメント:

コメントを投稿