我正在建立一个票务系统,但我不想把其中一个消息
************************* REPLY ABOVE THIS LINE ***********************
Gmail倾向于使用“引用文字”做出相当不错的主意。有没有人知道任何预制的脚本或方法很容易做到这一点?我正在尝试将他们的回复传回我们的系统。
谢谢, 克里
答案 0 :(得分:2)
您可以随时使用HTML电子邮件并在HTML评论中添加某种分隔符:
<!-- **********SEPARATOR********** -->
然后回到简单的
**********SEPARATOR**********
如果用户不支持HTML电子邮件。您只需在正在解析的电子邮件中查找后者,它就可以在两种情况下正常工作(纯文本和HTML)。
答案 1 :(得分:2)
我认为你需要像我的全数组diff功能:
/**
Full Array Diff implemented in pure php, written from scratch.
Copyright (C) 2011 Andres Morales <yo@kijote.com.ar>
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
http://www.gnu.org/licenses/gpl.html
About:
I needed a function to compare a email and its response but array_diff()
does not cover my expectations. So I reimplement a full array diff function.
You can use it directly in your code and adopt to your needs.
Contact:
yo@kijote.com.ar <Andres Morales>
**/
function farray_diff($array1, $array2){
$out = array();
$max_arr = count($array1) > count($array2)? count($array1) : count($array2);
$i = 0;
$j = 0;
while($i < $max_arr && $j< $max_arr){
if($array1[$i] == $array2[$j]){
array_push($out, $array1[$i]);
}
else {
if(in_array($array1[$i], array_slice($array2, $j))){
for($k = $j; $k<$max_arr; $k++){
if($array1[$i]==$array2[$k]){
array_push($out, $array2[$k]);
$j = $k;
break;
}
else{
array_push($out, array('o' => '', 'n' => $array2[$k]));
}
}
}
elseif(in_array($array2[$j], array_slice($array1, $i))){
for($k = $i; $k<$max_arr; $k++){
if($array2[$j]==$array1[$k]){
array_push($out, $array1[$k]);
$i = $k;
break;
}
else {
array_push($out, array('o' => $array1[$k], 'n' => ''));
}
}
}
else{
if(!empty($array1[$i]))
array_push($out, array('o' => $array1[$i], 'n' => $array2[$j]));
else
array_push($out, array('o' => '', 'n' => $array2[$j]));
}
}
$i++; $j++;
}
return $out;
}
因此,您只需使用它,如下例所示:
$str1 = "This is a simple text that can you reply, so can you do it?";
$str2 = "I response in your text: This is a simple text (no so simple) that can be replied, so can you do it? Yes, I can!";
// Printing the full array diff of single space exploded strings
print_r(farray_diff(explode(' ', $str1), explode(' ', $str2)));
返回:
Array
(
[0] => Array
(
[o] =>
[n] => I
)
[1] => Array
(
[o] =>
[n] => response
)
[2] => Array
(
[o] =>
[n] => in
)
[3] => Array
(
[o] =>
[n] => your
)
[4] => Array
(
[o] =>
[n] => text:
)
[5] => This
[6] => is
[7] => a
[8] => simple
[9] => text
[10] => Array
(
[o] =>
[n] => (no
)
[11] => Array
(
[o] =>
[n] => so
)
[12] => Array
(
[o] =>
[n] => simple)
)
[13] => that
[14] => can
[15] => Array
(
[o] =>
[n] => be
)
[16] => Array
(
[o] =>
[n] => replied,
)
[17] => Array
(
[o] =>
[n] => so
)
[18] => Array
(
[o] =>
[n] => can
)
[19] => you
[20] => Array
(
[o] => reply,
[n] =>
)
[21] => Array
(
[o] => so
[n] =>
)
[22] => Array
(
[o] => can
[n] =>
)
[23] => Array
(
[o] => you
[n] =>
)
[24] => do
[25] => it?
[26] => Array
(
[o] =>
[n] => Yes,
)
[27] => Array
(
[o] =>
[n] => I
)
[28] => Array
(
[o] =>
[n] => can!
)
它就像一个简单的差异,但是没有“+”和“ - ”,在用“o”(对于旧)和“n”(对于新的)数组键进行简单解析之后,两者都被替换了。您可以使用以下函数来解析结果:
function format_response($diff_arr){
$new = false;
echo '<span class="old">';
foreach($diff_arr as $item)
{
$content = '';
if (!is_array($item)){
$new = false;
$content = $item;
}
else
if (empty($item['o']) && !empty($item['n'])){
$new = true;
$content = $item['n'];
}
if($old_new != $new){
if($new)
echo '</span><span class="new">';
else
echo '</span><span class="old">';
}
echo $content . (!empty($content)?' ':'');
$old_new = $new;
}
echo '</span>';
}
因此,您可以使用:
来解析数组,而不是使用简单的“print_r”format_response(farray_diff(explode(' ', $str1), explode(' ', $str2)));
你获得(跟随这个例子)这样的东西:
<span class="old"></span><span class="new">I response in your text: </span><span class="old">This is a simple text </span><span class="new">(no so simple) </span><span class="old">that can </span><span class="new">be replied, so can </span><span class="old">you do it? </span><span class="new">Yes, I can! </span>
显然,为了正确显示你之前需要定义css“old”和“new”类的结果,有一些不同,pex:不同的前景色:
<style>.old{color: #808080;}.new{color:#000000}</style>
用于HTML电子邮件,或者您可以修改format_response函数以显示no-html电子邮件。
注意:正如您所看到的,我的功能是免费软件,并且符合GNU通用公共许可证。
希望它对你有所帮助。
答案 2 :(得分:0)
似乎Gmail正在对流行的“引用文本”标题进行一些精心设计的正则表达式匹配,即
-----原始信息-----
来自:...
发送:...
致:...
主题:......
OR
On&lt; date&gt ;, John Smith&lt; email&gt;写道:
...
OR
的 强> 的 __ _ __ _ __ _ __ _ ____ 强>
来自:...
发送:...
致:...
主题:......
他们实际上并没有很好地认识到这些......