特殊字符
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
Code
(1)\xn 匹配ASCII码值等于n的字符。n必须是两位的十六进制整数。例如,“\x41”匹配字符“A”。用这种方式可以表示所有非打印字符。
(2)\n 此处的n是一个一位的八进制数(0~7)。如果\n前面至少有n个捕获子匹配,那么\n是反向引用,否则,匹配ASCII码值等于n的字符。
(3)\nm此处的m和n都是一个一位的八进制数(0~7)。如果\nm前面至少有nm个捕获子表达式,那么nm是反向引用。如果\nm前面至少有n个捕获,那么\n是反向引用, m是字面意义上的数字字符。如果前面的条件皆不存在,\nm匹配ASCII码值等于八进制的nm的字符。
(4)\nml 当n是八进制数(0~3),m和l是八进制数(0~7)时,匹配ASCII码值等于八进制的nml的字符。
(5)\un 匹配Unicode编码等于n的字符。此处的n必须是一个4位的十六进制整数。例如,\u00A9匹配版权符号(©)。
(6)\cx 匹配由x指定的控制字符。例如,\cM匹配Ctrl+M表示的控制字符,即回车符。X的值必须在A~Z或a~z之间,否则,c就是字面意义的字符“c”。
注意
“\x041”的意义是“\x04”所表示的字符后跟字符“1”。
对于上面的一些特殊字符来说,有些比较危险。
如
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
Code
string msg = @"dsf\uh"; // \uxxxx 匹配16进制,但又不是16进制,则alert时就会出错,故要过滤掉
// msg = msg.Replace("\\", "\\\\");
string s = @"<script language='javascript'>alert('"+msg +"');</script>";
Response.Write(s);
对于以上问题,对反斜杠进行转义应该不会有问题了。即用\\\\替换\\.