wordpress - 如何防止 WordPress 从 URL 查询字符串中剥离 "at"符号 (@)?

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

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

http://www.website.com/<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="c6f9a3aba7afaafba0a7ada3a3aba7afaa86bfa3a7aeb1aea9e8a5a9ab" rel="noreferrer noopener nofollow">[email protected]</a>

然而,Wordpress 将其变成了这样:

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

我什至尝试像这样进行 URL 编码:

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

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

我知道@是保留字符,但我应该仍然可以使用URL编码版本。唉,Wordpress 不希望这样。

如何强制 WordPress 尊重 @ 符号?我猜我要么必须破解内部结构,要么执行一些 mod_rewrite 魔法。

最佳答案

来自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;
}

接下来,尝试在 URL 中传递 ?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-”。

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

关于wordpress - 如何防止 WordPress 从 URL 查询字符串中剥离 "at"符号 (@)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8049382/

相关文章:

wordpress - Phpstorm 在使用带有全局变量 $wpdb 的prepare和get_results方法时发出警告

.htaccess - 简单的 .htaccess 重写单个获取参数

页面为 SSL 时的 Apache 重定向

asp.net - 为什么Request.QueryString ["ReturnUrl"]即使在URL中也返回NULL呢?

c# - MVC WebGrid如何更新查询字符串

HTML:为什么元素占用这么多宽度?

php - woocommerce - 更改类别中产品的 html

javascript - 如何操作 `get_price_html()` 函数?

php - Laravel 获取 500 内部服务器错误

php - 用于查询表中所有记录的字符串