在PHP中清理文本

时间:2010-08-26 05:18:37

标签: php parsing

这是一个字符串:

--0-1946616131-1282798399=:21360 Content-Type: text/plain; charset=us-ascii --------------
------ do not change ---------------------------- Ticket ID : #987336 --------------------
------------------------------------------- Hello, This is my problem try to solve this 
thank u --0-1946616131-1282798399=:21360 Content-Type: text/html; charset=us-ascii"

现在我要删除 -

--0-1946616131-1282798399=:21360 Content-Type: text/plain; charset=us-ascii

--0-1946616131-1282798399=:21360 Content-Type: text/html; charset=us-ascii

部分。我的意思是清理文本。

我该怎么做?

4 个答案:

答案 0 :(得分:0)

你可以做两个正则表达式,或者你可以尝试一些分裂。这是第二种选择:

//the original string
$string = "--0-1946616131-1282798399=:21360 Content-Type: text/plain; charset=us-ascii -------------------- do not change ---------------------------- Ticket ID : #987336 --------------------------------------------------------------- Hello, This is my problem try to solve this thank u --0-1946616131-1282798399=:21360 Content-Type: text/html; charset=us-ascii";
//split the string into lines separated by --0-
$splitstring = explode("--0-",$string);
print "<pre>";
print_r($splitstring);
print "</pre>";
//create an array that will be our final clean strings
$cleanstrings = array();
//go through each of our lines
foreach($splitstring as $line){
    //if it has content
    if (strlen($line)>0) {
        //then split it again to get rid of the junk sections
        $splitline = explode("charset=us-ascii",$line);
        //if the second part of the string has content
        if (strlen($splitline[1])>0) {
            //then add it to our list of clean strings
            $cleanstrings[] = $splitline[1];
        }
    }
}
print "<pre>";
print_r($cleanstrings);
print "</pre>";

答案 1 :(得分:0)

使用这个简单的一行代码(其中$text是输入文本):

$newtext = str_replace('--0-1946616131-1282798399=:21360 Content-Type: text/plain; charset=us-ascii', '', $text);

答案 2 :(得分:0)

请说明此字符串是否变化以及如何或始终相同?

此外,您似乎首先要做错事来获取此字符串。或者你无法控制传入的字符串?

要看的功能: str_replacepreg_replaceexplode

答案 3 :(得分:0)

这似乎是MIME multipart message的一部分。如果是这种情况,您要删除的部分是不可预测的。

应在邮件标题中指定不同部分之间的中断,如下所示:

Content-Type: multipart/mixed; boundary="frontier"

boundary="frontier"意味着消息的每个新部分都将通过以下内容引入:

--frontier
Content-Type: text/plain

由于邮件的发件人可以完全自由地选择他喜欢的任何文本作为边界,因此在不查看邮件标题的情况下它们是不可预测的。除非你有一个特定边界的特定情况,否则几乎不可能在事后可靠地删除边界文本。在解析消息时需要“清理”它。

如果 处理非常有限的,可预测的边界集,则应指定其格式并尝试使用正则表达式删除它们。