খাঁটি BASH উত্তর এখানে।
rawurlencode() {
local string="${1}"
local strlen=${#string}
local encoded=""
local pos c o
for (( pos=0 ; pos<strlen ; pos++ )); do
c=${string:$pos:1}
case "$c" in
[-_.~a-zA-Z0-9] ) o="${c}" ;;
* ) printf -v o '%%%02x' "'$c"
esac
encoded+="${o}"
done
echo "${encoded}" # You can either set a return variable (FASTER)
REPLY="${encoded}" #+or echo the result (EASIER)... or both... :p
}
আপনি এটি দুটি উপায়ে ব্যবহার করতে পারেন:
easier: echo http://url/q?=$( rawurlencode "$args" )
faster: rawurlencode "$args"; echo http://url/q?${REPLY}
[সম্পাদিত]
এখানে মেলানো কাঁচাবার্ডিকোড () ফাংশনটি রয়েছে - যা - সমস্ত বিনয়ের সাথে - দুর্দান্ত।
# Returns a string in which the sequences with percent (%) signs followed by
# two hex digits have been replaced with literal characters.
rawurldecode() {
# This is perhaps a risky gambit, but since all escape characters must be
# encoded, we can replace %NN with \xNN and pass the lot to printf -b, which
# will decode hex for us
printf -v REPLY '%b' "${1//%/\\x}" # You can either set a return variable (FASTER)
echo "${REPLY}" #+or echo the result (EASIER)... or both... :p
}
মিলের সেট সহ, আমরা এখন কয়েকটি সাধারণ পরীক্ষা করতে পারি:
$ diff rawurlencode.inc.sh \
<( rawurldecode "$( rawurlencode "$( cat rawurlencode.inc.sh )" )" ) \
&& echo Matched
Output: Matched
এবং যদি আপনি সত্যিই অনুভব করেন যে আপনার একটি বাহ্যিক সরঞ্জাম প্রয়োজন (ভাল, এটি অনেক দ্রুত চলে যাবে, এবং বাইনারি ফাইলগুলি এবং এই জাতীয় ...
replace_value=$(echo $replace_value | sed -f /usr/lib/ddns/url_escape.sed)
যেখানে url_escape.sed ছিল এমন একটি ফাইল যা এই বিধিগুলি ধারণ করে:
# sed url escaping
s:%:%25:g
s: :%20:g
s:<:%3C:g
s:>:%3E:g
s:#:%23:g
s:{:%7B:g
s:}:%7D:g
s:|:%7C:g
s:\\:%5C:g
s:\^:%5E:g
s:~:%7E:g
s:\[:%5B:g
s:\]:%5D:g
s:`:%60:g
s:;:%3B:g
s:/:%2F:g
s:?:%3F:g
s^:^%3A^g
s:@:%40:g
s:=:%3D:g
s:&:%26:g
s:\$:%24:g
s:\!:%21:g
s:\*:%2A:g