1

我在“$description”中请求的 MySQL 数据库中有一个文本,我想知道\\\\\\\\r\\\\\\\\n描述中是否存在。所以我得到了:

if(strpos($description, "\\\\\\\\r\\\\\\\\n") !== FALSE) {
echo "String is here.";
} else {
echo "String not found.";
}

但这总是输出“找不到字符串”。\\\\\\\\r\\\\\\\\n而且我相信搜索到的字符串 ( )中存在错误的转义。我怎样才能通过 strpos \\\\\\\\r\\\\\\\\n?此外,我可能会结束 str_replace-ing every \\\\\\\\r\\\\\\\\nwith\r\n因为有人做了一些不好的转义函数和数据到达\\\\\\\\r\\\\\\\\n而不是\r\n,所以 str_replace 也面临同样的问题。我可以在任何这些任务(str_pos,str_replace)上使用帮助。

非常感谢你。

4

3 回答 3

1
if(strpos($description, '\\\\\\\\\\\\\\\\r\\\\\\\\\\\\\\\\n') !== FALSE) {
echo "String is here.";
} else {
echo "String not found.";
}

进一步阅读

于 2011-03-17T18:45:15.650 回答
1

检测反斜杠字符的不幸性质是因为它也是通用转义字符。并且要将文字反斜杠放入字符串中,您必须将其转义 - 使用它自己

也就是说,如果您想检测单个反斜杠,您的代码可能如下所示

if(strpos($description, '\\' ) !== FALSE)

因此,如果您想检测八个连续的反斜杠,您要匹配的字符串将需要双倍 - 十六。

if(strpos($description, '\\\\\\\\\\\\\\\\' ) !== FALSE)

因此,您使用的最后一场比赛strpos()必须看起来像这样

if(strpos($description, '\\\\\\\\\\\\\\\\r\\\\\\\\\\\\\\\\n' ) !== FALSE)

还注意到我切换到单引号。那是因为\nand是在双引号字符串文字内部\r 解释的。

您也可以使用正则表达式来执行此操作,这将更加灵活和强大

if ( preg_match( "/\\x5C{8}[rn]/", $description ) )

编辑

对于搜索替换,我建议这样的事情。正如我上面提到的,正则表达式将变得更强大——这个正则表达式将匹配\r\n(而不仅仅是当它们相邻时)任何数量的前面的反斜杠,而不仅仅是其中的 8 个。

$description = preg_replace( "/\\x5C+([rn])/", '\\\${1}', $description );
于 2011-03-17T18:54:04.600 回答
0
<?php
$in = "abc";
if(preg_match('/\n|\r/',$in)){
    echo 'found';
}else{
    echo 'not found';
}
于 2011-03-17T18:44:10.103 回答