我正在制作一个php工具来自动创建和正确编码mailto链接。
我已经使它适用于一般文本,但我需要能够在HTML电子邮件模板创建程序选择的自定义分隔符之间包含代码。
节目分隔符为< %%>。
这是我目前的代码:
$ link =“mailto:unsubscribe@example.com?& subject =取消订阅& body =亲爱的<%User.Name%> \ r \ n请将您从邮件列表中删除。\ r \ n注:< ;%Customer.Ref%>“; $ link = str_replace(“”,“%20”,$ link);
$ link = str_replace(“\ r \ n”,“%0A”,$ link);
目前它会转换分隔符中的空格,我怎么能阻止它这样做呢?
答案 0 :(得分:0)
也许,不是最优雅的解决方案,但它确实有效。我正在用分隔符拆分你的字符串,并使用一个简单的确定性有限状态机来替换分隔符之外的字符串。
<?php
$link = "Dear <% User N a m e %>Please remove me";
function escape_outside_delimiters(&$string)
// {{{
{
$output = "";
//splitting the string by either <% or %>, keeping the delimiters
$matches = preg_split("/(:?<%|%>)/",
$string,
-1,
PREG_SPLIT_DELIM_CAPTURE);
//replacing everything outside delimiters,
//putting the escaped chunks to $output
$n = count($matches);
$flag = 0;
for ($i = 0; $i < $n; ++$i)
{
switch ($matches[$i]){
case "<%":
$flag = 1;
break;
case "%>":
$flag = 0;
break;
default:
if ($flag == 0)
{
$matches[$i] = str_replace(" ", "%20", $matches[$i]);
}
}
$output .= $matches[$i];
}
return $output;
}
// }}}
$link = escape_outside_delimiters($link);
print $link;
打印:
Dear%20<% User N a m e %>Please%20remove%20me