E-posta için PHP düz metin için HTML dönüştürme

9 Cevap php

I TinyMCE benim sitenin içindeki metnin minimal biçimlendirme izin için kullanabilirsiniz. Ürettiği bu HTML, ben e-posta için düz metin dönüştürmek istiyorum. I html2text adında bir sınıf kullanarak oldum, ama gerçekten diğer şeyler arasında, UTF-8 için destek yoksundur. Daha önce vardı metin etrafında çizgi koyarak gibi - Ben böyle düz metin biçimlendirme için bazı HTML etiketleri haritalar, ancak, do HTML etiketleri.

Herkes PHP düz metin HTML dönüştürmek için benzer bir yaklaşım kullanıyor mu? Ve eğer öyleyse: ben kullanabileceğiniz herhangi bir üçüncü taraf sınıfları tavsiye ediyor musunuz? Ya da nasıl en iyi bu sorunu çözmek mi?

Teşekkürler!

9 Cevap

Kullanım html2text (source; Örnek HTML text için), Eclipse Public License lisanslıdır. Bu HTML yüklemek için PHP'nin DOM yöntemlerini kullanır ve sonra elde edilen DOM üzerinde dolaşır düz metin ayıklayın. Kullanımı:

$text = convert_html_to_text($html);

Tamamlanmamış olsa da, açık kaynak ve katkıları bekliyoruz.

Diğer dönüşüm komut ile ilgili sorunlar:

Bir kullanarak metne HTML dönüştürme DOMDocument uygun bir çözümdür. PHP5 gerektirir, Html2Text düşünün:

İlişkin UTF-8, "howto" sayfa devletler yazma-up:

Unicode için PHP'nin kendi desteği oldukça zayıf olduğunu ve her zaman doğru utf-8 işlemez. Html2Text komut (mbstring modülü gerekmeden) unicode-güvenli yöntemler kullanıyor olsa da, her zaman kodlamaları PHP'nin kendi kullanımı ile baş edemez. PHP gerçekten unicode veya utf-8 gibi kodlamaları anlamak ve ISO-8859 aileden biri olma eğilimindedir sistemin taban kodlamasını kullanır. Sonuç olarak, ne utf-8 veya tek bayt birinde, iyi PHP tarafından yanlış olabilir, metin editörü geçerli bir karakter gibi size görünebilir. Yani Html2Text geçerli bir karakteri besleyen düşünmek bile, iyi olmayabilir.

Yazar, bu çözümü için çeşitli yaklaşımlar sağlar ve (DOMDocument kullanarak) Html2Text sürüm 2 UTF-8 desteğine sahip olduğunu belirtiyor.

Ticari kullanım için kısıtlamalar unutmayın.

Güvenilir strip_tags işlevi var. Oldukça olsa değil. Sadece sterilize edeceğiz. Sen fantezi çizgi almak yerine bir dize ile birleştirmek olabilir.


<?php
// to strip all tags and wrap italics with underscore
strip_tags(str_replace(array("<i>", "</i>"), array("_", "_"), $text));

// to preserve anchors...
str_replace("|a", "<a", strip_tags(str_replace("<a", "|a", $text)));

?>

Bunu başarmak için-stdin ve-dökümü seçenekleri vaşak kullanabilirsiniz:

<?php
$descriptorspec = array(
   0 => array("pipe", "r"),  // stdin is a pipe that the child will read from
   1 => array("pipe", "w"),  // stdout is a pipe that the child will write to
   2 => array("file", "/tmp/htmp2txt.log", "a") // stderr is a file to write to
);

$process = proc_open('lynx -stdin -dump 2>&1', $descriptorspec, $pipes, '/tmp', NULL);

if (is_resource($process)) {
    // $pipes now looks like this:
    // 0 => writeable handle connected to child stdin
    // 1 => readable handle connected to child stdout
    // Any error output will be appended to htmp2txt.log

    $stdin = $pipes[0];
    fwrite($stdin,  <<<'EOT'
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
 <title>TEST</title>
</head>
<body>
<h1><span>Lorem Ipsum</span></h1>

<h4>"Neque porro quisquam est qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit..."</h4>
<h5>"There is no one who loves pain itself, who seeks after it and wants to have it, simply because it is pain..."</h5>
<p>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque et sapien ut erat porttitor suscipit id nec dui. Nam rhoncus mauris ac dui tristique bibendum. Aliquam molestie placerat gravida. Duis vitae tortor gravida libero semper cursus eu ut tortor. Nunc id orci orci. Suspendisse potenti. Phasellus vehicula leo sed erat rutrum sed blandit purus convallis.
</p>
<p>
Aliquam feugiat, neque a tempus rhoncus, neque dolor vulputate eros, non pellentesque elit lacus ut nunc. Pellentesque vel purus libero, ultrices condimentum lorem. Nam dictum faucibus mollis. Praesent adipiscing nunc sed dui ultricies molestie. Quisque facilisis purus quis felis molestie ut accumsan felis ultricies. Curabitur euismod est id est pretium accumsan. Praesent a mi in dolor feugiat vehicula quis at elit. Mauris lacus mauris, laoreet non molestie nec, adipiscing a nulla. Nullam rutrum, libero id pellentesque tempus, erat nibh ornare dolor, id accumsan est risus at leo. In convallis felis at eros condimentum adipiscing aliquam nisi faucibus. Integer arcu ligula, porttitor in fermentum vitae, lacinia nec dui.
</p>
</body>
</html>
EOT
    );
    fclose($stdin);

    echo stream_get_contents($pipes[1]);
    fclose($pipes[1]);

    // It is important that you close any pipes before calling
    // proc_close in order to avoid a deadlock
    $return_value = proc_close($process);

    echo "command returned $return_value\n";
}

Bu fonksiyonu test edebilirsiniz

function html2text($Document) {
    $Rules = array ('@<script[^>]*?>.*?</script>@si',
                    '@<[\/\!]*?[^<>]*?>@si',
                    '@([\r\n])[\s]+@',
                    '@&(quot|#34);@i',
                    '@&(amp|#38);@i',
                    '@&(lt|#60);@i',
                    '@&(gt|#62);@i',
                    '@&(nbsp|#160);@i',
                    '@&(iexcl|#161);@i',
                    '@&(cent|#162);@i',
                    '@&(pound|#163);@i',
                    '@&(copy|#169);@i',
                    '@&(reg|#174);@i',
                    '@&#(d+);@e'
             );
    $Replace = array ('',
                      '',
                      '',
                      '',
                      '&',
                      '<',
                      '>',
                      ' ',
                      chr(161),
                      chr(162),
                      chr(163),
                      chr(169),
                      chr(174),
                      'chr()'
                );
  return preg_replace($Rules, $Replace, $Document);
}

Markdownify Markdown, bu çok sitede kullanılan bir düz metin biçimlendirme sistemine HTML dönüştürür.

Markdownify benim için harika çalıştı! Peki bu konuda ne söz gerekmektedir: i Html2Text daha başka bir çözüm (daha önce bu konuya sözü ne) aradığı başlıca sebebi neydi, mükemmel utf-8 destekler.

Ben sadece bir PHP işlevini "strip_tags ()" ve benim durumumda kendi çalışma bulduk.

Ben aşağıdaki HTML dönüştürmek için çalıştı:

<p><span style="font-family: 'Verdana','sans-serif'; color: black; font-size: 7.5pt;">&nbsp;</span>Many  practitioners are optimistic that the eyeglass and contact lens  industry will recover from the recent economic storm. Did your practice  feel its affects?&nbsp; Statistics show revenue notably declined in 2008 and  2009. But interestingly enough, those that monitor these trends state  that despite the industry's lackluster performance during this time,  revenue has grown at an average annual rate&nbsp;of 2.2% over the last five  years, to $9.0 billion in 2010.&nbsp; So despite the downturn, how were we  able to manage growth as an industry?</p>

Strip_tags () fonksiyonu uygulandıktan sonra, ben aşağıdaki çıktıyı var:

&amp;nbsp;Many  practitioners are optimistic that the eyeglass and contact lens  industry will recover from the recent economic storm. Did your practice  feel its affects?&amp;nbsp; Statistics show revenue notably declined in 2008 and  2009. But interestingly enough, those that monitor these trends state  that despite the industry&#039;s lackluster performance during this time,  revenue has grown at an average annual rate&amp;nbsp;of 2.2% over the last five  years, to $9.0 billion in 2010.&amp;nbsp; So despite the downturn, how were we  able to manage growth as an industry?

Burada başka bir çözümdür:

$cleaner_input = trim(strip_tags($text));