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

Gra*_*ful 8 php regex

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

preg_replace('|[^a-z0-9-~+_.?#=!&;,/:%@$\|*\'()\\x80-\\xff]|i', '', $some_url)
Run Code Online (Sandbox Code Playgroud)

现在,我认为它基本上试图删除除上述字符之外的任何内容.但是没有\\x80-\\xff提到某种形式的不可打印的ascii字符?如果是这样,为什么代码可能会尝试不删除它们?

任何迹象/指针/帮助将不胜感激.谢谢.

Gra*_*ful 8

好的,到目前为止给出的所有答案都引导我朝着正确的方向前进,并允许我在文档中找到以下内容.

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

所以,作为总结: -

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

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

iii)'\ xhh'指定0-FF范围内的代码点

iv)'\ x80-\xFF'是指ASCII之外的字符范围


mar*_*rio 5

x80-xFF是非 ASCII 字符范围。它们仍然可以打印,无论是用 Latin-1 还是为 UTF-8 编码更高的代码点。

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

在双引号中,使用 just\x80会被 PHP 解释,而\\x80被正则表达式引擎看到和解释。