How to forbidden wordpress url exchange `&` to `#0

2019-07-09 01:16发布

I want to pass some value through url in wordpress, but I met some trouble that wordpress will exchange & to #038; automatically, how to make a & still as a & ?

I noticed in wp-includes/formatting.php, there has many rules to exchange symbols, I tried modify some code, but failed.

some link like

site.com?this=that&that=this will output to the web browser address like site.com?this=that#038that=this

and the page can not get the value in the part that=this

how to setting correctly? thanks.

3条回答
▲ chillily
2楼-- · 2019-07-09 02:07

I also had this problem, after some research I found this plugin which fixes it. After installing the plugin you just add these tags around the piece of code you don't want wordpress to format. Like so:

<!-- noformat on -->
Your code with & in it
<!-- noformat off -->

Hope that helps!

查看更多
乱世女痞
3楼-- · 2019-07-09 02:09

One More Solution:

wp-includes\formatting.php: in esc_url () comment the line

$url = str_replace( '&', '&', $url );

It works for me.

查看更多
来,给爷笑一个
4楼-- · 2019-07-09 02:21

You can disable wptexturize() by adding this in a functions.php file inside your template folder (or add it to the existing one):

remove_filter('the_content', 'wptexturize');

But note that this will of course disable all the "cleaning", not just the '&' conversion.

If you prefer to just get rid of the ampersand conversion you can comment line 962 in formatting.php. I post lines 961 and 962 bellow (this is from an unaltered WP 3.1):

// Converts lone & characters into &#38; (a.k.a. &amp;)  
$content = preg_replace('/&([^#])(?![a-z1-4]{1,8};)/i', '&#038;$1', $content);
查看更多
登录 后发表回答