Opened 17 years ago
Closed 16 years ago
#4273 closed defect (bug) (worksforme)
Posting comments to pages with øæå redirects to a 404 page
Reported by: | orvar | Owned by: | westi |
---|---|---|---|
Milestone: | Priority: | high | |
Severity: | normal | Version: | 2.2 |
Component: | Permalinks | Keywords: | |
Focuses: | Cc: |
Description
[This is a repost of a ticket from the WPMU trac: http://trac.mu.wordpress.org/ticket/305]
How to reproduce
- Create a page with a name that contains non-ascii characters (eg. øæå) that are not replaced with ascii characters in the slug.
- Post a comment on that page.
The comment is saved but the user is not returned to the page. Instead he gets a 404 page not found error. After the comment has been saved to the db the user is redirected to a url where the specific non-asci characters are simply missing.
How to fix
This happens because get_permalink
for a page returns a page name that has been urldecoded. Which is fine for links (old browsers?) but does not work in a Location:
header.
Change get_page_uri
in wp-includes/post.php
to:
function get_page_uri($page_id, $decode = true) { $page = get_page($page_id); $uri = ( $decode ) ? urldecode($page->post_name) : $page->post_name; // A page cannot be it's own parent. if ( $page->post_parent == $page->ID ) return $uri; while ($page->post_parent != 0) { $page = get_page($page->post_parent); $uri = ( $decode ) ? urldecode($page->post_name) . "/" . $uri : $page->post_name . "/" . $uri; } return $uri; }
Change the call to get_page_uri
in the function _get_page_link
in wp-includes/link-template.php
to:
$link = get_page_uri($id, false);
I will try to post a diff for 2.2 later if nobody beats me to it.
Attachments (2)
Change History (12)
#5
@
17 years ago
- Keywords has-patch added; needs-testing removed
I can reproduce this.
I am not convinced by the fix. urldecoding in get_page_uri ensures that the:
a-test-page-%c3%b8%c3%a6a
is converted to a-test-page-\xc3\xb8\xc3\xa6a
This means we get the UTF8 chars in the browser source.
wp_redirect needs a url encoded sanitised link though and strips these chars out.
I will attach what I think is a better fix.
Testing done with PHP 5.2.4_pre200708051230-pl2-gentoo with Suhosin-Patch 0.9.6.2
#7
@
17 years ago
- Keywords 2nd-opinion added
My patch above fixed the issue for me.
But I'm not entirely convinced this is the right place.
I support the question is - should get_permlink return urlencoded urls or not?
#10
@
16 years ago
- Cc janbrasna added
- Component changed from i18n to Permalinks
- Keywords has-patch 2nd-opinion removed
- Milestone 2.9 deleted
- Resolution set to worksforme
- Status changed from assigned to closed
Seems fixed as of 2.7–RC2, the header sent (for page named "Testing broken øæå redirs") after posting a comment is:
Location: http://example.com/testing-broken-%c3%b8%c3%a6a-redirs/comment-page-1/#comment-6
which behaves correctly (Safari 3, Firefox 3).
Hi,
I'm Kirin. When i try to fix the problem, 'see comment:ticket:3727:27 ', I found we don't need to urldecode the post_name. But it needs more testing.