如何从字符串中删除错误转义的换行符

时间:2012-02-14 23:22:47

标签: php str-replace

这里我有一个字符串,在某些时候它的\ r \ n不正确地逃脱了..我们无法从根本上解决这个问题(想象它来自不同的系统)。

$orig = 'Helprn rnrnI need somebodyrnrnrnHelp rnrnNo just burn baby burn anybody';

我怎么能安全地,一直地替换rn,但改变像bu * rn *这样的词(或以rn结尾的任何其他词,例如http://www.morewords.com/ends-with/rn/) ?

$correctString = str_replace(' rn', '<br/>', $orig);
$correctString = str_replace('<br/>rn', '<br/><br/>', $correctString);
// etc... until we have a totally clean string..

$correctString必须看起来像:

Help


I need somebody


Help 

No just burn baby burn anybody

3 个答案:

答案 0 :(得分:2)

这基本上是不可能的,有些信息丢失了,所以你将无法重新创建它。

只有手动后处理才能区分“刻录”等异常。

我想说,如果你的文字总是简单的英文,请创建一个包含“rn”的单词的词典,并将它们用作算法中的例外,这样可以改善过程,因为它可以用于“刻录”,但不会是完美的,因为它不适用于“burnrnbaby”。

答案 1 :(得分:2)

我知道当你遇到问题所带来的情况时,没有办法正确检测“rn”作为回车。

我认为您需要迭代文本,按空格分解,并将每个值与字典进行比较。

但即便如此也许是不可能的。那些包含“rn”但是也是单词(或名字!)而没有“rn”的单词怎么样?你怎么知道“rn”是回车还是单词的一部分?

  学习写给她父亲。 (Lea <br/>写信给她父亲。)

     这篇论文写得很撕裂他。 (该文件是写给<br/>的。)

我认为你唯一能安全做的就是将“rnrn”的实例转换为双回车;据我所知,模式不是任何单词的一部分。

在该步骤之后,考虑将数据转换为人类。但显然这种可行性取决于你的命令(或支票簿......)下的人的数据量和可用性。

答案 2 :(得分:1)

如果它总是rn的组,如rnrnrn或rnrn那么rn的正则表达式后跟一个或多个rn,例如: (rn)\ 1+做替换会在某种程度上起作用