首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在PHP中将HTML转换为纯文本以用于电子邮件

在PHP中将HTML转换为纯文本以用于电子邮件
EN

Stack Overflow用户
提问于 2009-12-11 06:31:55
回答 9查看 186.1K关注 0票数 84

我使用TinyMCE来允许在我的站点中设置最小的文本格式。根据生成的HTML,我想将其转换为电子邮件的纯文本。我一直在使用一个名为html2text的类,但它在其他方面确实缺乏对UTF8的支持。然而,我确实喜欢它将某些HTML标签映射到纯文本格式-就像在HTML中有标签的文本周围加下划线一样。

有人使用类似的方法在PHP中将HTML转换为纯文本吗?如果是这样的话:你能推荐一些我可以使用的第三方类吗?或者你如何最好地解决这个问题?

EN

回答 9

Stack Overflow用户

发布于 2013-06-26 00:58:56

这是另一个解决方案:

代码语言:javascript
复制
$cleaner_input = strip_tags($text);

有关清理函数的其他变体,请参阅:

https://github.com/ttodua/useful-php-scripts/blob/master/filter-php-variable-sanitize.php

票数 27
EN

Stack Overflow用户

发布于 2009-12-11 07:07:45

有一个值得信赖的strip_tags函数。但这并不是很漂亮。它只会起到消毒作用。您可以将其与字符串替换相结合,以获得花哨的下划线。

代码语言:javascript
复制
<?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)));

?>
票数 13
EN

Stack Overflow用户

发布于 2012-03-08 10:32:05

您可以使用带有-stdin和-dump选项的lynx来实现这一点:

代码语言:javascript
复制
<?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";
}
票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1884550

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档