Opened 7 months ago

Closed 7 months ago

#22138 closed defect (bug) (fixed)

wp_basename wrong on Windows Systems

Reported by: sebber Owned by: ryan
Priority: normal Milestone: 3.5
Component: Formatting Version: 3.4.2
Severity: normal Keywords: has-patch commit
Cc: knut@…, bpetty

Description

On Windows System the Directory Seperator is \ instead of Unix /.

So the urlencode in wp_basename() encodes the \ and it is not removed in basename().

WP_basename is not working properly on Windows Systems.

Just take a look in the Support Forum:

http://wordpress.org/support/topic/function-wp_basename-is-wrong-in-windows?replies=3

Attachments (1)

22138.patch (500 bytes) - added by SergeyBiryukov 7 months ago.

Download all attachments as: .zip

Change History (11)

Possible Resolution:

function wp_basename( $path, $suffix = '' ) {
$path = str_replace( '\', '/', $path );
$path = str_replace( '%2F', '/', urlencode( $path ) );
return urldecode( basename( $path ), $suffix );

}
Last edited 7 months ago by SergeyBiryukov (previous) (diff)
  • Keywords has-patch needs-unit-tests added; needs-patch removed
  • Milestone changed from Awaiting Review to 3.5

Confirmed. wp_basename() is mostly used on attachment URLs in core, which is why, I guess, we didn't catch this earlier.

  • Summary changed from wp_basname wrong on Windows Systems to wp_basename wrong on Windows Systems

I checked your solution. It seems all right. Thank you

  • Cc knut@… added
  • Keywords needs-unit-tests removed

I added unit tests for wp_basename for this situation.

Obviously, I also tested, and 22138.patch works.

Last edited 7 months ago by bpetty (previous) (diff)
  • Cc bpetty added
  • Keywords commit added
  • Owner set to ryan
  • Resolution set to fixed
  • Status changed from new to closed

In [22310]:

Fix wp_basename() for Windows by replacing %5C with /.

Props SergeyBiryukov
fixes #22138

Note: See TracTickets for help on using tickets.