我需要提取Joomla中表单生成的电子邮件的主题/正文。 我使用一些标签来定义每种语言的不同主题/正文,例如:
{lang en}English Text{/lang}
{lang it}Italian Text{/lang}
{lang fr}French Text{/lang}
我有以下代码用于从不同语言的主题中分离文本:
$msgSubject = $template->subject;
if ($language=='it-IT')
{
preg_match('~{lang it}([^{]*){/lang}~i', $msgSubject, $match);
$msgSubject=($match[1]);
}
elseif ($language=='en-GB')
{
preg_match('~{lang en}([^{]*){/lang}~i', $msgSubject, $match);
$msgSubject=($match[1]);
}
等等其他语言。 它适用于电子邮件的主题,这只是纯文本。 如果我在Body上做同样的事情,这是一个包含像p和br这样的HTML元素的字符串,依此类推,它不起作用.... 代码示例:
$msgBody = $template->body;
if ($language=='it-IT')
{
preg_match('~{lang it}([^{]*){/lang}~i', $msgBody, $match);
$msgBody=($match[1]);
}
elseif ($language=='en-GB')
{
preg_match('~{lang en}([^{]*){/lang}~i', $msgBody, $match);
$msgBody=($match[1]);
}
它根本不输出任何东西。我应该在preg_match函数中更改什么以避免使用HTML标记进行批量处理?
答案 0 :(得分:2)
我已经检查了你的代码,它也可以正常使用html代码。但我认为$ msgBody包含与joomla一起使用的多个标签。 所以你应该使用下面的代码
preg_match_all('~{lang it}([^{]*){/lang}~i', $msgBody, $match);
因为preg_match仅匹配第一次出现。
答案 1 :(得分:1)
点击preg_match_all
这是你想要的吗?对我有用..
http://www.phpliveregex.com/p/fkB
编辑:
如果你喜欢这样:
http://www.phpliveregex.com/p/fkF
你也掌握了这种语言而且你不需要ifs。