百分比编码保留字符
Percent Encoding Reserved Characters
Wikipedia 列出了我试图用百分比编码替换字符串中的几个保留字符。字符是:
字符
编码
!
%21
#
%23
$
%24
%
%25
&
%26
'
%27
(
%28
)
%29
*
%2A
+
%2B
,
%2C
/
%2F
:
%3A
;
%3B
=
%3D
?
%3F
@
%40
[
%5B
]
%5D
我的批处理脚本正在读取用户的输入,然后输出一个字符串,其中保留字符已替换为它们的百分比编码值。
问题是一些字符没有被读入,而其他字符在尝试对它们进行百分比编码时不起作用。
我的密码是
@echo off
setlocal EnableDelayedExpansion
set /p pass=Enter pass:
@REM Do % first so it doesn't replace all the new %
set "pass=!pass:%%=%%25!"
@REM Not working - set "pass=!pass:!=%%21!"
set "pass=!pass:#=%%23!"
set "pass=!pass:$=%%24!"
set "pass=!pass:&=%%26!"
set "pass=!pass:'=%%27!"
set "pass=!pass:(=%%28!"
set "pass=!pass:)=%%29!"
@REM Not working set "pass=!pass:*=%%2A!"
set "pass=!pass:+=%%2B!"
set "pass=!pass:,=%%2C!"
set "pass=!pass:/=%%2F!"
set "pass=!pass::=%%3A!"
set "pass=!pass:;=%%3B!"
@REM Not working set "pass=!pass:==%%3D!"
set "pass=!pass:?=%%3F!"
set "pass=!pass:@=%%40!"
set "pass=!pass:[=%%5B!"
set "pass=!pass:]=%%5D!"
echo %pass%
pause
我正在用 Test ! # $ % ' ( ) * + , / : ; = ? @ [ ]
进行测试。
文本中的 !
似乎没有读入字符串,我不得不注释掉三个字符转换,因为它们不起作用。
我怎样才能使它能够读取!在?
如何转义 3 个注释掉的字符,以便将所有保留字符转换为它们的百分比编码?
我会这样做:
@echo off
setlocal EnableDelayedExpansion
set /P "pass=Enter pass: "
echo !pass: = !
rem Standard cases
for %%a in ("%%=25" "#=23" "$=24" "&=26" "'=27" "(=28" ")=29" "+=2B"
",=2C" "/=2F" ":=3A" ";=3B" "@=40" "[=5B" "]=5D" ) do (
for /F "tokens=1,2 delims== eol=" %%x in (%%a) do (
set "pass=!pass:%%x=%%%%y!"
)
)
rem First two special cases
setlocal DisableDelayedExpansion
set "pass=%pass:!=[21]%"
setlocal EnableDelayedExpansion
set "pass=!pass:[21]=%%21!"
set "pass=!pass:?=%%3F!"
rem Last two special cases
:star
for /F "tokens=1* delims=*" %%x in (" !pass! ") do (
if "%%y" neq "" (
set "pass=%%x%%2A%%y"
set "pass=!pass:~1,-1!"
goto star
)
)
:equal
for /F "tokens=1* delims==" %%x in (" !pass! ") do (
if "%%y" neq "" (
set "pass=%%x%%3D%%y"
set "pass=!pass:~1,-1!"
goto equal
)
)
echo %pass%
示例:
Enter pass: Test ! # $ % & ' ( ) * + , / : ; = ? @ [ ]
Test ! # $ % & ' ( ) * + , / : ; = ? @ [ ]
Test %21 %23 %24 %25 %26 %27 %28 %29 %2A %2B %2C %2F %3A %3B %3D %3F %40 %5B %5D
Wikipedia 列出了我试图用百分比编码替换字符串中的几个保留字符。字符是:
字符 | 编码 |
---|---|
! | %21 |
# | %23 |
$ | %24 |
% | %25 |
& | %26 |
' | %27 |
( | %28 |
) | %29 |
* | %2A |
+ | %2B |
, | %2C |
/ | %2F |
: | %3A |
; | %3B |
= | %3D |
? | %3F |
@ | %40 |
[ | %5B |
] | %5D |
我的批处理脚本正在读取用户的输入,然后输出一个字符串,其中保留字符已替换为它们的百分比编码值。
问题是一些字符没有被读入,而其他字符在尝试对它们进行百分比编码时不起作用。
我的密码是
@echo off
setlocal EnableDelayedExpansion
set /p pass=Enter pass:
@REM Do % first so it doesn't replace all the new %
set "pass=!pass:%%=%%25!"
@REM Not working - set "pass=!pass:!=%%21!"
set "pass=!pass:#=%%23!"
set "pass=!pass:$=%%24!"
set "pass=!pass:&=%%26!"
set "pass=!pass:'=%%27!"
set "pass=!pass:(=%%28!"
set "pass=!pass:)=%%29!"
@REM Not working set "pass=!pass:*=%%2A!"
set "pass=!pass:+=%%2B!"
set "pass=!pass:,=%%2C!"
set "pass=!pass:/=%%2F!"
set "pass=!pass::=%%3A!"
set "pass=!pass:;=%%3B!"
@REM Not working set "pass=!pass:==%%3D!"
set "pass=!pass:?=%%3F!"
set "pass=!pass:@=%%40!"
set "pass=!pass:[=%%5B!"
set "pass=!pass:]=%%5D!"
echo %pass%
pause
我正在用 Test ! # $ % ' ( ) * + , / : ; = ? @ [ ]
进行测试。
文本中的 !
似乎没有读入字符串,我不得不注释掉三个字符转换,因为它们不起作用。
我怎样才能使它能够读取!在? 如何转义 3 个注释掉的字符,以便将所有保留字符转换为它们的百分比编码?
我会这样做:
@echo off
setlocal EnableDelayedExpansion
set /P "pass=Enter pass: "
echo !pass: = !
rem Standard cases
for %%a in ("%%=25" "#=23" "$=24" "&=26" "'=27" "(=28" ")=29" "+=2B"
",=2C" "/=2F" ":=3A" ";=3B" "@=40" "[=5B" "]=5D" ) do (
for /F "tokens=1,2 delims== eol=" %%x in (%%a) do (
set "pass=!pass:%%x=%%%%y!"
)
)
rem First two special cases
setlocal DisableDelayedExpansion
set "pass=%pass:!=[21]%"
setlocal EnableDelayedExpansion
set "pass=!pass:[21]=%%21!"
set "pass=!pass:?=%%3F!"
rem Last two special cases
:star
for /F "tokens=1* delims=*" %%x in (" !pass! ") do (
if "%%y" neq "" (
set "pass=%%x%%2A%%y"
set "pass=!pass:~1,-1!"
goto star
)
)
:equal
for /F "tokens=1* delims==" %%x in (" !pass! ") do (
if "%%y" neq "" (
set "pass=%%x%%3D%%y"
set "pass=!pass:~1,-1!"
goto equal
)
)
echo %pass%
示例:
Enter pass: Test ! # $ % & ' ( ) * + , / : ; = ? @ [ ]
Test ! # $ % & ' ( ) * + , / : ; = ? @ [ ]
Test %21 %23 %24 %25 %26 %27 %28 %29 %2A %2B %2C %2F %3A %3B %3D %3F %40 %5B %5D