2017-12-02 110 views
0

在WordPress的,但在PHP每个正则表达式匹配更普遍,下面这个suggestion,我想回调在字符串

  1. 转换电子邮件地址mailto链接和
  2. 编码的mailto与str_13链接()
  3. 要通过javascript解码客户端。

我一日数做精

add_filter('the_content', 'make_clickable',  12); 

,我还不知道是否三号计数,这将工作

document.write("<n uers=\"znvygb:[email protected]\" ery=\"absbyybj\">Fraq n zrffntr</n>".replace(/[a-zA-Z]/g, 
function(c){return String.fromCharCode((c<="Z"?90:122)>=(c=c.charCodeAt(0)+13)?c:c-26);})); 

我想我要什么要做的只是在替换之后的每一次出现中,而不是preg_replace注入str_13()。我发现this question并试图答案传递给我的情况:

add_filter('the_content', 'email_encoder', 99); 

function email_encoder($content) { 
    return preg_replace_callback('`\<a([^>])href\=\"mailto\:([^">])\"([^>]*)\>`ism', 'encode_str_13', $content); 
} 

function encode_str_13($matches) 
{ 
    return str_13($matches[1]);  
} 

这改变不了什么,我很茫然,为什么。我怀疑这是我从here或数组项目地址获得的正则表达式,如果我稍微改变它,字面上什么都不会显示,直到我恢复更改(我似乎对我的想法并不正确)。

你能帮我编码所有的mailto链接并纠正我的javascript来解码他们吗?

感谢

编辑:这是一个例子$内容:

<p>text<br> 
text<br> 
text<br> 
numbers<br> 
<a href="mailto:....>...</a><br> 
<a href="...." rel="nofollow">....</a></p> 

而事实上我确实意味着str_rot13()而不是str_13()

EDIT2:

的JS我经过更多的摆弄之后就是这样的:

var collection = jQuery(".encoded"); 
collection.each(function() { 

var encoded = jQuery(this).html(); 

var decoded = encoded.replace(/[a-zA-Z]/g, function(c){return String.fromCharCode((c<="Z"?90:122)>=(c=c.charCodeAt(0)+13)?c:c-26);}); 
jQuery(this).html(decoded); 
jQuery(this).prop('class', 'decoded') 

}); 
+0

你能提供样品'$ content'?我也不熟悉'str_13',那是什么?也许它应该是http://php.net/manual/en/function.str-rot13.php? – chris85

+0

啊!你是对的,如果我得到了正确的正则表达式,这会让我感到困扰,谢谢! – user148585

回答

0

你的正则表达式是有点不对,这里是一个正确的(DEMO):

`\<a([^>])href\=\"mailto\:([^">]+)\"([^>]*)\>`ism 

而且在回调使用2指标,如:

function encode_str_13($matches) 
{ 
    return str_13($matches[2]);  
} 
+0

谢谢,这真是快速而简洁。我真的错过了第二组中的+号吗?!并感谢您纠正该阵列。 – user148585

+0

结束语:您的正则表达式和数组地址正确地编码了电子邮件地址。我更进一步:'return preg_replace_callback('/ \ ] +)href \ = \“mailto \:([^>] +)\”([*>] *)\>(。*?)\ <\/a\>/is','encode_str_13',$ content);'和'return“”“。str_rot13($ matches [0])。“”;'编码整个''将被解码和reclassed解码为JS(见我的文章) – user148585