在 URL 中使用 %2F 代替斜杠?

7

我在url链接中遇到了jquery语法问题:

这是我得到的链接(英语):

...myaccount/?lang=en%2Fprint-order%2F2067%2F&print-order-type=receipt

这是德语链接:

...myaccount/print-order/2067/?print-order-type=receipt

现在的问题是,当我复制链接时,链接看起来在我的浏览器中没有问题:

myaccount/print-order/2067/?print-order-type=receipt

但实际上,在链接内部始终有"%2F"而不是"/",这导致出现404错误。

当我手动替换"%2F"时,链接就可以正常工作。

问题出在哪里?有什么办法可以解决吗?

下面的代码来自于woocommerce/templates/myaccount/my-orders.php

if ($actions) { foreach ( $actions as $key => $action ) { echo '<a
 href="' . esc_url( $action['url'] ) . '" class="button ' .
 sanitize_html_class( $key ) . '">' . esc_html( $action['name'] ) .
 '</a>'; }

它在“我的订单”页面上生成“打印”按钮。我使用mqtranslate德语/英语版本。在德语版本中,一切正常-链接是正确的,只有当我切换语言时,会出现“%2f”而不是“/”。但仅限于第一部分(直到myaccount/)-因为某些“/”被正确编码。
此外,在英语版本中,“print-order-type=receipt”之前是“&”,而不是“?”。

你不确定 jQuery 或 JavaScript 对你的 URL 问题有什么影响吗? - Xatenev
2
展示你正在使用的jQuery代码。 - Rudy
是的,抱歉,也许这不是jQuery的问题 - 我最初也是这样认为的。我添加了从生成它的文件中提取的代码。 - ad2003
在第一个URL中,看起来你有两个查询字符串:myaccount/?lang=en%2Fprint-order%2F2067%2F?print-order-type=receipt。似乎第二个URL print-order/2067/?print-order-type=receipt 被附加到了 myaccount/?lang=en 上。 - Daniel J.G.
嗨,丹尼尔,是的,没错 - 我正在使用mqtranslate,并用jquery删除了这段代码 - "href.replace",所以我一开始认为它与jquery有关。但实际上并不是。我认为是因为这个"esc_url" - 但我不知道在哪里更改它。它也没有真正与此有关... - ad2003
2个回答

12

嗨,Alex,感谢您的建议,但代码是动态的。因此,每个项目的URL都会更改。 - ad2003
@ad2003 你可以直接将动态值传递给该函数。 - Alex W
非常感谢!现在可以工作了! - ad2003

2

请执行以下步骤:

echo '<a href="' . urldecode($action['url'] ) ....

更多信息请参考:http://us1.php.net/manual/en/function.urldecode.php

urldecode()正是你所需要的。只需在foreach循环中应用它即可。

这将解决你的问题。

祝好:)

你可以在http://3v4l.org/mhVuV这样的phpfiddle网站上尝试一下 :)

将以下内容放入框中:

    echo urldecode("myaccount/?lang=en%2Fprint-order%2F2067%2F&print-order-type=receipt");

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接