Email vücut imza kesmek için en iyi yol

5 Cevap php

Ben bazı e-postalar ayrıştırma duyuyorum. Cep Posta, iPhone ve iPod touch basit kaldırmak için yapım, ayrı bir sınır olarak bir imza atmak varsayalım. Tüm posta istemcileri yapmak ve sadece kullanmak değil '-' bir imza sınırlayıcı olarak.

'-' Ben kesmek için gereken bir dize, ancak bunun sadece son olay.

Örnek kopya

 hello, this is some email copy-- check this out
 --
 Tom Foolery

'-' Ben bölme hakkında thougth son bölümünü kaldırarak, ve ben (o var, ama patlayabilir) ve split () o şey yaptıysam bana bildirdiğiniz için büyük değerler dönmek gibi görünüyor ne, olay yoktur bir maç.

Ben preg_replace birden fazla hat üzerinden gitmek alınamıyor. Ben \ n tüm satır sonları standartlaştırdık

Ne ile sonuna kadar en iyi öneri "merhaba, bu bazı e-posta kopyalama - Bu check out", imza yok, ve tabii ki durumlar olacaksa olacak durumlar olmayacak alarak nerede yapamam tüm durumları kapsamaktadır.

5 Cevap

Ben daha fazla kurşun olma çıkarına, ben olmayan regex yol alacağını düşünüyor

        echo substr($body, 0, strrpos($body, "\n--"));

Aslında correct signature delimiter böylece sınırlayıcı sıradanifade olmalı, "-- \n" (Yeni satır öncesi boşluk unutmayın) '^-- $'. Eğer '^--\s*$' kullanmayı düşünebilirsiniz, bu yüzden yanlış olur OE, birlikte çalışacağız rağmen.

Bu deneyin:

preg_replace('/--[\r\n]+.*/s', '', $body)

Bu --, bir veya daha fazla satır sonu karakterleri ardından ilk oluşumu sonra her şeyi kaldırmak olacaktır. Sadece son görüldüğü yerde kaldırmak istiyorsanız, bunun yerine /.*--[\r\n]+.*/s kullanın.

Bunun yerine hemen sonra her şeyin doğrama - o kullanıcı veya servis tarafından gönderilen son birkaç e-postaları önbelleğe ve karşılaştırın olamazdı. Diğerleri gibi görünüyor altındaki bit güvenli bir şekilde bozulmamış uygun mesaj bırakarak kaldırılabilir.

Bu bana en iyi sonucu verecek gibi görünüyor:

$body = preg_replace('/\s*(.+)\s*[\r\n]--\s+.*/s', '$1', $body);

  • Bu "(yeni satır) - (opsiyonel boşluk / satırsonlarını) (imza)" son maç ve Döşeme
  • Imzalanmasından önce kalan tüm satırsonlarını Trim
  • Vücuttan başlangıç ​​/ bitiş boşlukları Trim (vücudun başında imza, boşluklarla, vb önce kalan newlines)
  • Bazı metin (boşluk olmayan) imzalanmasından önce varsa sadece çalışır (aksi takdirde imza şerit ve sağlam değil dönecektir)