Twig:Unescape十六进制文本

时间:2015-06-09 07:30:42

标签: php html symfony hex twig

我尝试在我的网站上保护电子邮件地址,并使用下面的函数(twig过滤器)对其进行编码:

/**
 * The twig filter associated with this function is "encode_email"
 */
function encode_emailFilter($email) 
{ 
    $text = $email; 
    $text_encode = ''; 

    for ($x=0; $x < strlen($text); $x++) { 
        $text_encode .= '&#x' . bin2hex($text[$x]).';'; 
    } 

    return $text_encode; 
} 

所以,我像这样编码了我的电子邮件

{{ emailFromDatabase|encode_email }}

在我的HTML页面上,它显示

&#x73;&#x75;&#x70;&#x65;&#x72;&#x6d;&#x61;&#x72;&#x69;&#x6f;&#x40;&#x67;&#x6d;&#x61;&#x69;&#x6c;&#x2e;&#x63;&#x6f;&#x6d;

我尝试将“raw”添加到过滤器中,但我总是得到相同的结果

{{ emailFromDatabase|raw|encode_email }}

但是,如果直接显示十六进制而不用{{ }}包装,则电子邮件地址会正确显示

<span>&#x73;&#x75;&#x70;&#x65;&#x72;&#x6d;&#x61;&#x72;&#x69;&#x6f;&#x40;&#x67;&#x6d;&#x61;&#x69;&#x6c;&#x2e;&#x63;&#x6f;&#x6d;</span>

//Returns
supermario@gmail.com

那么,我应该在我的twig变量中添加哪些过滤器才能使其正常工作?

提前感谢您的回答

1 个答案:

答案 0 :(得分:2)

您需要将raw放在最后:

{{ emailFromDatabase|encode_email|raw }}

因为你想:

  • 采取变量
  • 编码
  • 然后显示它而不转义