HTML düz metin (e-posta)

5 Cevap php

Do you know any good HTML to plain text conversion class written in PHP?

Ben düz metin posta gövdesindeki HTML posta vücut dönüştürmek için gereklidir.

I wrote simple function, but I need more features like converting tables, adding links at the end, converting nested lists…

-- regards
takeshin

5 Cevap

HTML ile sadece yumurtlar lynx Buralarda uygulanmasını gönderme ve özel bir posta metin sürümü için çıkışını kullanır. Mükemmel değil ama çalışır. Ayrıca links veya elinks kullanabilirsiniz.

Vaşak kullanarak sunucu üzerinde çalıştırılabilir dosyaları çalıştırmak için izniniz yalnızca bir seçenektir. Bunu yapmak, ancak iyi bir uygulama olarak kabul edilmez. Ayrıca, güvenli konaklarda php süreç vaşak çalıştırmak için gerekli olan bash oturumları, yumurtlamak mümkün sınırlıdır.

Ben bulmak mümkün PHP tamamen yazılmış en komple bir çözümdür Horde_Text_Filter_Html2text sınıftır. Bu Horde framework bir parçasıdır.

Ben denedim başka çözümler şunlardır:

Birisi mükemmel bir çözüm var ise, daha fazla referans için geri gönderin!

Ben soru PHP ile ilgili olduğunu biliyorum, ama ben metne HTML dönüştürmek için bu Perl değişmeze yapmak için vaşak fikrini kullandı:

use File::Temp;

sub html2Txt {
    my $html = shift;
    my $htmlF = File::Temp->new(SUFFIX => '.html');
    print $htmlF $html;
    close $htmlF;
    return scalar `/usr/bin/lynx -dump $htmlF 2> /dev/null`;
}

print html2Txt '<b>Hi there</b> Testing';

yazdırır: Hi there Testing

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";
}