1

简而言之 ,使用单个字符串值更改我们指定的字符串值的连续出现。IE

hello \t\t\t\t\t world \n\n\n\n\t\t\t

hello \t world \n\t

详细地

\n\tExample\n\r\nto \nunderstand\n\r\n the current\n situatuion\t\t\t\t\t.

我想要输出为

 Example
to 
understand
 the current
 situation .

以 html 输出

<br /> Example<br />to <br />understand<br /> the current<br /> situation .

我设法得到这个输出

Example

to 
understand

the current
situatuion .

使用此代码

$str='\n\tExample\n\r\nto \nunderstand\n\r\n the current\n situatuion\t\t\t\t\t.';


 echo str_replace(array('\n', '\r','\t','<br /><br />' ),
            array('<br />', '<br />',' ','<br />'), 
            $str);
4

2 回答 2

0

你可以试试这个替代方案。

$string = "\n\tExample\n\r\nto \nunderstand\n\r\n the current\n situation\t\t\t\t\t.";

$replacement = preg_replace("/(\t)+/s", "$1", $string);

$replacement = preg_replace("/(\n\r|\n)+/s", '<br />', $string);

echo "$replacement";

#<br /> Example<br />to <br />understand<br /> the current<br /> situation

.

于 2013-10-28T19:00:48.860 回答
0

如果您知道要替换的字符子集,例如\r\n,\n\t,则单个正则表达式应该可以将它们的所有重复实例替换为相同的:

/(\r\n|\n|\t)\1+/

您可以将其与 PHP一起使用preg_replace()以获得替换效果:

$str = preg_replace('/(\r\n|\n|\t)\1+/', '$1', $str);

然后,为了使输出“对 HTML 友好”,您可以使用其中一个nl2br()str_replace()(或两者)进行另一次传递:

// convert all newlines (\r\n, \n) to <br /> tags
$str = nl2br($str);

// convert all tabs and spaces to &nbsp;
$str = str_replace(array("\t", ' '), '&nbsp;', $str);

请注意,您可以\r\n|\n|\t将上述正则表达式\s中的替换为替换“所有空格”(包括常规空格);我专门写出来是因为您没有提到常规空格,并且如果您想在列表中添加其他字符以进行替换。

编辑更新了\t上面的替换以替换每个注释说明的单个空格而不是 4 个空格。

于 2013-10-28T18:32:03.127 回答