Php 是否在URL清理的正则表达式中包含反斜杠?

Php 是否在URL清理的正则表达式中包含反斜杠?,php,regex,url,Php,Regex,Url,我有以下正则表达式: $url = "http://example.com?param=test1\test2\test3\test4"; $cleanUrl = preg_replace('|[^a-z0-9-~+_.?\[\]\^#=!&;,/:%@$\|*`\'<>"()\\x80-\\xff\{\}]|i', '', $url); $url=”http://example.com?param=test1\test2\test3\test4”; $cleanUrl=

我有以下正则表达式:

$url = "http://example.com?param=test1\test2\test3\test4";

$cleanUrl = preg_replace('|[^a-z0-9-~+_.?\[\]\^#=!&;,/:%@$\|*`\'<>"()\\x80-\\xff\{\}]|i', '', $url);
$url=”http://example.com?param=test1\test2\test3\test4”;
$cleanUrl=preg\u replace(“|[^a-z0-9-~+.?\[\]\^^=!&;”,/:%@$\\\*`'”()\\x80-\\xff\{\}i',“$url”);
我得到以下输出:

但是,, 我期待以下输出:

\test2\test3\test4

我尝试使用这个正则表达式,但它不起作用:

    $cleanUrl = preg_replace('|[^a-z0-9-~+_.?\[\]\^\\#=!&;,/:%@$\|*`\'<>"()\\x80-\\xff\{\}]|i', '', $url);
                                                    ^ escaped single quote
$cleanUrl=preg\u replace('.[^a-z0-9-~+.?\[\]\^\\\\\\\\\=!&;,/:%@$\\\\\\*`'()\\x80-\\xff\{\}i','.$url);
^转义单引号

也许,您正在做的事情可以通过其他方式实现,但是回答您的问题,我应该注意,您的输入字符串不包含反斜杠,它包含制表符,在双引号字符串文本中,
\t
定义了转义序列

使用单引号文字后,
\t
表示2个符号。现在,正则表达式没有
\
。您需要将其添加到
\\\\

$url = 'http://example.com?param=test1\test2\test3\test4';
$cleanUrl = preg_replace('|[^-\\\\a-z0-9~+_.?\[\]^#=!&;,/:%@$\|*`\'<>"()\x80-\xff{}]|i', '', $url);
echo $cleanUrl;
$url='1!'http://example.com?param=test1\test2\test3\test4';
$cleanUrl=preg\u replace('.[^-\\\a-z0-9~+.?\[\]^.=!&;,/:%@$\\\*`'”()\x80-\xff{}i','.$url);
echo$cleanUrl;
请参见打印
http://example.com?param=test1\test2\test3\test4


我还将
-
移到了开头(最好的做法是将它放在字符类的开头或结尾,如果它应该匹配文字连字符),并且不在char类的初始位置的
^
不必转义[,但方括号最好转义(某些正则表达式风格不允许在字符类中使用未转义的
[

是否确定输入字符串?请参阅。我认为它应该是
$url=”http://example.com?param=test1\\test2\\test3\\test4”
。然后使用
$cleanUrl=preg\u replace(“|[^-\\\\a-z0-9~+.?\[\]\^#=!&;,/:%@$\\\\*``'(\x80-\xff\{\}]| i','$url);
。请参阅。您必须使用\\\\来转义反斜杠。请阅读此内容