Skip to content

Instantly share code, notes, and snippets.

Created November 4, 2009 20:30
What would you like to do?
* mb_str_pad
* @param string $input
* @param int $pad_length
* @param string $pad_string
* @param int $pad_type
* @return string
* @author Kari "Haprog" Sderholm
function mb_str_pad( $input, $pad_length, $pad_string = ' ', $pad_type = STR_PAD_RIGHT)
$diff = strlen( $input ) - mb_strlen( $input );
return str_pad( $input, $pad_length + $diff, $pad_string, $pad_type );
Copy link

There is a feature request in the PHP bug tracker for integrating such a function in the core. Please look at and vote for it. Thanks

If you want to provide explicit encoding usage, you can define the function like this:

function mb_str_pad($input, $pad_length, $pad_string = ' ', $pad_type = STR_PAD_RIGHT, $encoding = null)
    if (!$encoding) {
        $diff = strlen($input) - mb_strlen($input);
    else {
        $diff = strlen($input) - mb_strlen($input, $encoding);
    return str_pad($input, $pad_length + $diff, $pad_string, $pad_type);

Copy link

If your pad_string is itself multibyte, this still won't give the right result. The tricky part is that str_pad will copy as many bytes out of the pad_string as it needs to reach the pad_length, and will therefore generate corrupt strings. So, basically, you cannot use str_pad unless you first make sure you append too many bytes and then copy the right length out of it via mb_substr.

Copy link

bad idea as unless the whole string is multi-byte this could lead to issues with string encoding...

Copy link

Works for me.

Copy link

ksidibe commented Mar 13, 2017

Works for me too...
This is the behavior I expected from str_pad.

Copy link

Copy link

Copy link

Copy link

Thanks man. 2 hours with this problem.

Copy link

Thank you

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment