ænd*_*rük 37 text command-line conversion encoding url
如何在命令行上编码和解码百分比编码(URL 编码)字符串?
我正在寻找可以做到这一点的解决方案:
$ percent-encode "ændrük"
%C3%A6ndr%C3%BCk
$ percent-decode "%C3%A6ndr%C3%BCk"
ændrük
Run Code Online (Sandbox Code Playgroud)
Ste*_*zzo 40
这些命令执行您想要的操作:
python -c "import urllib, sys; print urllib.quote(sys.argv[1])" æ
python -c "import urllib, sys; print urllib.unquote(sys.argv[1])" %C3%A6
Run Code Online (Sandbox Code Playgroud)
如果要将空格编码为+,请替换urllib.quote为urllib.quote_plus。
我猜你会想给它们取别名;-)
ken*_*orb 31
尝试以下命令行:
$ echo "%C3%A6ndr%C3%BCk" | sed 's@+@ @g;s@%@\\x@g' | xargs -0 printf "%b"
ændrük
Run Code Online (Sandbox Code Playgroud)
您可以将其定义为别名并将其添加到您的 shell rc文件中:
$ alias urldecode='sed "s@+@ @g;s@%@\\\\x@g" | xargs -0 printf "%b"'
Run Code Online (Sandbox Code Playgroud)
然后每次需要时,只需使用:
$ echo "http%3A%2F%2Fwww" | urldecode
http://www
Run Code Online (Sandbox Code Playgroud)
编写脚本时,您可以使用以下语法:
input="http%3A%2F%2Fwww"
decoded=$(printf '%b' "${input//%/\\x}")
Run Code Online (Sandbox Code Playgroud)
但是,上述语法无法+正确处理加号 ( ),因此您必须通过sed.
您还可以使用以下urlencode()和urldecode()功能:
$ echo "%C3%A6ndr%C3%BCk" | sed 's@+@ @g;s@%@\\x@g' | xargs -0 printf "%b"
ændrük
Run Code Online (Sandbox Code Playgroud)
请注意,您的 urldecode() 假设数据不包含反斜杠。
带xxd工具的Bash 功能:
$ alias urldecode='sed "s@+@ @g;s@%@\\\\x@g" | xargs -0 printf "%b"'
Run Code Online (Sandbox Code Playgroud)
在cdown 的 gist 文件中找到,也在stackoverflow 中找到。
尝试定义以下别名:
alias urldecode='python -c "import sys, urllib as ul; print ul.unquote_plus(sys.argv[1])"'
alias urlencode='python -c "import sys, urllib as ul; print ul.quote_plus(sys.argv[1])"'
Run Code Online (Sandbox Code Playgroud)
用法:
$ urlencode "ændrük"
C%26ndrC%3Ck
$ urldecode "%C3%A6ndr%C3%BCk"
ændrük
Run Code Online (Sandbox Code Playgroud)
资料来源:鲁斯兰斯皮瓦克
使用 PHP,您可以尝试以下命令:
$ echo oil+and+gas | php -r 'echo urldecode(fgets(STDIN));' // Or: php://stdin
oil and gas
Run Code Online (Sandbox Code Playgroud)
要不就:
php -r 'echo urldecode("oil+and+gas");'
Run Code Online (Sandbox Code Playgroud)
使用-R多线路输入。
在 Perl 中,您可以使用URI::Escape.
decoded_url=$(perl -MURI::Escape -e 'print uri_unescape($ARGV[0])' "$encoded_url")
Run Code Online (Sandbox Code Playgroud)
或处理文件:
perl -i -MURI::Escape -e 'print uri_unescape($ARGV[0])' file
Run Code Online (Sandbox Code Playgroud)
使用sed可以通过以下方式实现:
cat file | sed -e's/%\([0-9A-F][0-9A-F]\)/\\\\\x\1/g' | xargs echo -e
Run Code Online (Sandbox Code Playgroud)
尝试匿名解决方案:
awk -niord '{printf RT?$0chr("0x"substr(RT,2)):$0}' RS=%..
Run Code Online (Sandbox Code Playgroud)
请参阅:使用 awk printf 对文本进行 urldecode。
如果您需要从文件名中删除 url 编码,请使用deurlname工具 from renameutils(eg deurlname *.*)。
也可以看看:
有关的:
小智 10
jq -s -R -r @uri
Run Code Online (Sandbox Code Playgroud)
-s( --slurp) 将输入行读入数组,-s -R( --slurp --raw-input) 将输入读入单个字符串。-r( --raw-output) 输出字符串的内容而不是 JSON 字符串文字。
xxd -p|tr -d \\n|sed 's/../%&/g'
Run Code Online (Sandbox Code Playgroud)
tr -d \\n删除xxd -p每 60 个字符后添加的换行符。
jq -s -R -r @uri
Run Code Online (Sandbox Code Playgroud)
没有-d ''这将跳过换行符和空字节。如果没有IFS=这将IFS用%00. 如果没有LC_ALL=C这个,例如在 UTF-8 语言环境中替换?为%3042。
小智 7
仅用于解码的纯 bash 解决方案:
$ a='%C3%A6ndr%C3%BCk'
$ echo -e "${a//%/\\x}"
ændrük
Run Code Online (Sandbox Code Playgroud)
类似于Stefano ansqer,但使用 Python 3:
\npython3 -c "import urllib.parse, sys; print(urllib.parse.quote(sys.argv[1]))" \xc3\xa6 # to percent-enconding\npython3 -c "import urllib.parse, sys; print(urllib.parse.unquote(sys.argv[1]))" %C3%A6 # from percent-enconding\nRun Code Online (Sandbox Code Playgroud)\n还要对斜杠进行编码:
\npython3 -c "import urllib.parse, sys; print(urllib.parse.quote(sys.argv[1] if len(sys.argv) > 1 else sys.stdin.read()[0:-1], \\"\\"))"\nRun Code Online (Sandbox Code Playgroud)\n有关差异的更多信息请参见此处。
\n我无法评论该线程中的最佳答案,所以这是我的。
\n\n就我个人而言,我使用这些别名进行 URL 编码和解码:
\n\nalias urlencode=\'python -c "import urllib, sys; print urllib.quote( sys.argv[1] if len(sys.argv) > 1 else sys.stdin.read()[0:-1])"\'\n\nalias urldecode=\'python -c "import urllib, sys; print urllib.unquote(sys.argv[1] if len(sys.argv) > 1 else sys.stdin.read()[0:-1])"\'\nRun Code Online (Sandbox Code Playgroud)\n\n这两个命令都允许您转换数据,作为命令行参数传递或从标准输入读取数据,因为两个单行命令都会检查是否存在命令行参数(甚至是空参数)并处理它们,否则只是读取标准输入。
\n\n...根据@muru 评论。
\n\n如果还需要对斜杠进行编码,只需在 quote 函数中添加一个空的第二个参数,那么斜杠也会被编码。
\n\n所以,bash中的urlencode 别名最终如下所示:
alias urlencode=\'python -c "import urllib, sys; print urllib.quote(sys.argv[1] if len(sys.argv) > 1 else sys.stdin.read()[0:-1], \\"\\")"\'\nRun Code Online (Sandbox Code Playgroud)\n\n$ urlencode "\xd0\x9f\xd1\x80\xd0\xbe\xd0\xb1\xd0\xb0 \xd0\xbf\xd0\xb5\xd1\x80\xd0\xb0/Pen test"\n%D0%9F%D1%80%D0%BE%D0%B1%D0%B0%20%D0%BF%D0%B5%D1%80%D0%B0%2FPen%20test\n\n$ echo "\xd0\x9f\xd1\x80\xd0\xbe\xd0\xb1\xd0\xb0 \xd0\xbf\xd0\xb5\xd1\x80\xd0\xb0/Pen test" | urlencode\n%D0%9F%D1%80%D0%BE%D0%B1%D0%B0%20%D0%BF%D0%B5%D1%80%D0%B0%2FPen%20test\n\n$ urldecode %D0%9F%D1%80%D0%BE%D0%B1%D0%B0%20%D0%BF%D0%B5%D1%80%D0%B0%2FPen%20test\n\xd0\x9f\xd1\x80\xd0\xbe\xd0\xb1\xd0\xb0 \xd0\xbf\xd0\xb5\xd1\x80\xd0\xb0/Pen test\n\n$ echo "%D0%9F%D1%80%D0%BE%D0%B1%D0%B0%20%D0%BF%D0%B5%D1%80%D0%B0%2FPen%20test" | urldecode\n\xd0\x9f\xd1\x80\xd0\xbe\xd0\xb1\xd0\xb0 \xd0\xbf\xd0\xb5\xd1\x80\xd0\xb0/Pen test\n\n$ urlencode "\xd0\x9f\xd1\x80\xd0\xbe\xd0\xb1\xd0\xb0 \xd0\xbf\xd0\xb5\xd1\x80\xd0\xb0/Pen test" | urldecode\n\xd0\x9f\xd1\x80\xd0\xbe\xd0\xb1\xd0\xb0 \xd0\xbf\xd0\xb5\xd1\x80\xd0\xb0/Pen test\n\n$ echo "\xd0\x9f\xd1\x80\xd0\xbe\xd0\xb1\xd0\xb0 \xd0\xbf\xd0\xb5\xd1\x80\xd0\xb0/Pen test" | urlencode | urldecode\n\xd0\x9f\xd1\x80\xd0\xbe\xd0\xb1\xd0\xb0 \xd0\xbf\xd0\xb5\xd1\x80\xd0\xb0/Pen test\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
49609 次 |
| 最近记录: |