Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/230.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php \\x80-\\xFF指的是什么?_Php_Regex - Fatal编程技术网

Php \\x80-\\xFF指的是什么?

Php \\x80-\\xFF指的是什么?,php,regex,Php,Regex,在寻找解决方案帮助清理某些输出的过程中,我遇到了执行以下操作的代码 preg_replace('|[^a-z0-9-~+_.?#=!&;,/:%@$\|*\'()\\x80-\\xff]|i', '', $some_url) 现在,我认为它基本上是试图删除除上述字符以外的任何字符。但是\\x80-\\xff不是指某种形式的不可打印ascii字符吗?如果是这样,为什么代码可能会尝试不删除它们 如有任何指示/指示/帮助,将不胜感激。谢谢。您不需要在PHP模式中使用双反斜杠,但是即使您使用它

在寻找解决方案帮助清理某些输出的过程中,我遇到了执行以下操作的代码

preg_replace('|[^a-z0-9-~+_.?#=!&;,/:%@$\|*\'()\\x80-\\xff]|i', '', $some_url)
现在,我认为它基本上是试图删除除上述字符以外的任何字符。但是
\\x80-\\xff
不是指某种形式的不可打印ascii字符吗?如果是这样,为什么代码可能会尝试不删除它们


如有任何指示/指示/帮助,将不胜感激。谢谢。

您不需要在PHP模式中使用双反斜杠,但是即使您使用它,它也会被忽略并作为转义读取(就像一个简单的反斜杠)


一个例外情况是,如果使用herdoc或nowdoc语法来括起模式,则双反斜杠被视为文字反斜杠。

x80
-
xFF
是非ASCII字符范围。它们仍然可以打印,都是拉丁语-1,或者为UTF-8编码更高的代码点

\x80
上使用
\\x80
稍微正确一些。反斜杠在字符串中自动转义。在单引号字符串中也是如此,尽管它实际上与此无关


但是,在双引号字符串中,仅使用
\x80
将由PHP进行解释,而
\\x80
将由正则表达式引擎进行查看和解释。

好的,到目前为止给出的所有答案都引导了我正确的方向,并允许我在

在\x之后,最多读取两个十六进制数字(字母可以是 大写或小写)。在UTF-8模式下,允许使用\x{…},其中 大括号的内容是一个十六进制数字字符串。它是 解释为UTF-8字符,其代码是给定的 十六进制数。原始十六进制转义序列,\xhh, 如果值大于127,则匹配两字节UTF-8字符

因此,作为总结:-

i) “\x”允许十六进制转义序列,在此序列之后,最多可读取两个十六进制数字

ii)“\xhh”两个“hh”字母可以是大写或小写

iii)“\xhh”指定范围为0-FF的代码点


iv)“\x80-\xFF”是指ASCII以外的字符范围,ASCII字符的UTF-8字节序列为1字节,类似于
0xxxxxxx
,因此它与
\x00-\x7f
匹配

如果一个字符不是ASCII,则表示它有多个字节,在这种情况下,字节将用前导
1

表的一部分来自


因此
\x80-\xff
匹配多字节字符中的
1xxxxxx
字节,因此基本上是非ASCII字符。

感谢您花时间回答。我理解你回答的第一部分。但是“但是,在双引号字符串中,仅使用\x80将由PHP解释,而\\x80将由正则表达式引擎查看和解释。”。。。我迷路了。此外,双反斜杠不应该结束于反斜杠本身,迫使它被视为一个单独的字符。。。让x80和xFF单独处理而不使用任何反斜杠?在重新阅读答案后,我还想问没有任何反斜杠的“| x80-xFF | I”是否是与上述意思相同的有效语法。不,它不会。阅读有关反斜杠的内容。
num of bytes
    1           0xxxxxxx
    2           110xxxxx    10xxxxxx    
    3           1110xxxx    10xxxxxx    10xxxxxx    
    4           11110xxx    10xxxxxx    10xxxxxx    10xxxxxx