如何防止Wordpress从URL查询字符串中删除“at”符号(@)?

时间:2011-11-08 11:02:38

标签: wordpress mod-rewrite query-string special-characters url-encoding

我正在尝试将电子邮件地址传递给wordpress页面,如下所示:

http://www.website.com/?email=fakeemail@yeahwho.com

但是,Wordpress将其转化为:

http://www.website.com/?email=fakeemailyeahwho.com 

我甚至尝试对其进行URL编码:

http://www.website.com/?email=fakeemail%40yeahwho.com

但是Wordpress太聪明了,仍然会移除%40。

我知道@是一个保留字符,但我仍然可以使用URL编码版本。唉,Wordpress并不希望它如此。

如何强制Wordpress尊重@符号?我猜我要么必须破解内部,要么做一些mod_rewrite魔法。

4 个答案:

答案 0 :(得分:2)

来自http://www.webopius.com/content/137/using-custom-url-parameters-in-wordpress

首先,将它添加到主题的functions.php文件中(或者创建一个自定义插件):

add_filter('query_vars', 'parameter_queryvars' );
function parameter_queryvars( $qvars )
{
    $qvars[] = 'email';
    return $qvars;
}

接下来,尝试在网址中传递?email=fakeemail-AT-yeahwho.com,然后将其转换回来:

global $wp_query;
if (isset($wp_query->query_vars['email']))
{
    $getemail = str_replace( '-AT-', '@', $wp_query->query_vars['email']);
}
// now use $getemail

这只会在非常罕见的实际上包含“-at-”的电子邮件中发挥作用。如果你担心这个问题,你可以替换一个更加模糊的字符串,如'-AT6574892654738-'。

无论您的最终解决方案是什么,都不要破解核心以使其发挥作用。 :)

答案 1 :(得分:1)

我遇到了类似的问题,我能够将问题与SEO插件隔离开来。我确定插件为functions.php添加了一个过滤器,但由于插件没有被使用,卸载插件也解决了这个问题。

答案 2 :(得分:0)

我也有这个问题,但它不是由插件引起的。这是WordPress对您的站点URL进行301重定向的结果,该站点URL有或没有www。在它。

如果我的网站网址定义为http://www.mydomain.com,那么这可以按预期工作:http://www.mydomain.com/?email=user@domain.com

如果用户以:http://mydomain.com/?email=user@domain.com(注意:没有www)访问该网站,则WordPress会重定向到此:http://www.mydomain.com/?email=userdomain.com(注意:已剥离的@符号)

我的解决方案是在htaccess文件中对www重定向进行硬编码,因此WordPress永远不会有机会弄乱我的URL。此页面提供了示例htaccess行以将非www重定向到www,反之亦然:http://dense13.com/blog/2008/02/27/redirecting-non-www-to-www-with-htaccess/

答案 3 :(得分:-1)

当我尝试将Mailchimp数据传递到Wordpress中的Gravity Form时,我遇到了类似的问题。我找到了解决方案。最初的问题表明Wordpress也剥离了%40,但在这种情况下它对我来说并没有。

1)在Mailchimp中创建一个新的Merge标记。我打电话给我的电子邮件参数'和* | EMAIL2 | *

2)导出您的订阅者列表

3)复制普通电子邮件'列内容进入新的电子邮件参数'柱。

4)查找和替换所有@符号到%40

5)导入列表并勾选自动更新该列表的框

6)更新您的URL以包含新参数 * | EMAIL2 | *

这对我有用。