Wordpress, PHP, URL Encoding Issue

徘徊边缘 提交于 2019-12-11 02:57:19

问题


Wordpress provides a function called "the_permalink()" that returns, you guessed it!, the permalink to a given post while in a loop of posts.

I am trying to URL encode that permalink and when I execute this code:

<?php
print(the_permalink());
$permalink = the_permalink();
print($permalink);
print(urlencode(the_permalink()));
print(urlencode($permalink));
$url = 'http://wpmu.local/graphjam/2008/11/06/test4/';
print($url);
print(urlencode($url));
?>

it produces these results in HTML:

http://wpmu.local/graphjam/2008/11/06/test4/
http://wpmu.local/graphjam/2008/11/06/test4/
http://wpmu.local/graphjam/2008/11/06/test4/
http://wpmu.local/graphjam/2008/11/06/test4/
http%3A%2F%2Fwpmu.local%2Fgraphjam%2F2008%2F11%2F06%2Ftest4%2F

I would expect lines 2, 3 and 5 of the output to be URL encoded, but only line 5 is so. Thoughts?


回答1:


According to the docs, the_permalink prints the permalink vs returns it. So, urlencode isn't getting anything to encode.

Try get_permalink.


[EDIT]

A little late for an edit, but I didn't realize the print counts were such an issue.

Here's where they're all coming from:

<?php
print(the_permalink());                                // prints (1)
$permalink = the_permalink();                          // prints (2)
print($permalink);                                     // nothing
print(urlencode(the_permalink()));                     // prints (3)
print(urlencode($permalink));                          // nothing
$url = 'http://wpmu.local/graphjam/2008/11/06/test4/'; 
print($url);                                           // prints (4)
print(urlencode($url));                                // prints (5)
?>



回答2:


the_permalink() echoes the permalink

get_the_permalink() returns the permalink so it can be assigned to a variable.

(same goes with most functions in WordPress: the_something() has a get_the_something() to return value instead of echoing it)




回答3:


@Jonathan has the reason why, and the way you should deal with it in WordPress (ie. use the right function for the job).

Here is how to fix it when there isn't a function that returns a string:

ob_start();
the_permalink();
$permalink = ob_get_clean();
print(urlencode($permalink));


来源:https://stackoverflow.com/questions/274157/wordpress-php-url-encoding-issue

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!