我有一串包含"\xaa“、"\xam”、"\xaz"格式的字符串数据。例如,当我把它们打印到屏幕上或试图逐字匹配它们时,这些字符串发生的事情太多了,我不明白:
echo "\xaa"; // prints a question mark to the screen
echo "\xa"; // simply shows noting
$strZero = strlen("\xaa"); // shows 1 as length of string
$strOne = strlen("\xaz"); // but this shows 2 as length of string 我不知道发生了什么,我的意思是,我知道这与utf8编码有关。我想要的是转义这些字符串,比如"\xaa“,得到字符,长度应该是4。
我知道也有类似的问题,比如:
$str = "\xaa"
utf8_encode($str); // this gives a not "\\xaa"
// or
utf8_decode($str); // this returns a question mark "?"所有这些返回转义字符串的方式都不是我想要的那样,我将如何务实地处理这个字符串,而不是在此之前放置一个额外的反斜杠来手动转义每个字符串。
发布于 2019-03-29 04:35:36
我想你对逸出序列有错误的理解。\用于表示转义字符。\x有一个特殊的含义
使用十六进制代码
hh的xhh字符
在UTF-8中
U+00EAêc3 aa拉丁文小写字母E加上回旋U+000A 0a
这就解释了你得到了一个?(如果您的浏览器不理解UTF-8 0xaa),则什么也不懂(因为0xa似乎无法打印)。
如果实际上希望\xaa或\xa作为字符串的值,则需要\\转义字符:
echo "\\xaa"; // Should show \xaa
echo "\\xa"; // Should show \xa
$strZero = strlen("\\xaa"); // should be 4 as length of string
$strOne = strlen("\\xaz"); // should be 4 as length of string https://stackoverflow.com/questions/55410401
复制相似问题