= $width ) { $newtext .= iconv_substr( $str, $laststart, $current - $laststart, 'UTF-8' ) . $break; $laststart = $current + 1; } $lastspace = $current; } // Special cut case, if no space has been seen else if ( $current - $laststart >= $width && $cut && $laststart >= $lastspace ) { $newtext .= iconv_substr( $str, $laststart, $current - $laststart, 'UTF-8' ) . $break; $laststart = $lastspace = $current; } // Usual case that line got longer than expected else if ( $current - $laststart >= $width && $laststart < $lastspace ) { $newtext .= iconv_substr( $str, $laststart, $lastspace - $laststart, 'UTF-8' ) . $break; // $laststart = $lastspace = $lastspace + 1; $laststart = ++$lastspace; } } // Rest of the string if ( $laststart !== $current ) { $newtext .= iconv_substr( $str, $laststart, $current - $laststart, 'UTF-8' ); } return $newtext; } /** * Binary safe str_pad() replacement. * * This method is a multi-byte encoding safe replacement for the PHP * function str_pad(). It mimics exactly the behavior of str_pad(), but * uses iconv_* functions with UTF-8 encoding. The parameters received by * this method equal the parameters of {@link http://php.net/str_pad * str_pad()}. Note: Make sure to hand only UTF-8 encoded content to this * method. * * @param string $input * @param int $padLength * @param string $padString * @param int $padType * @return string */ public function strPad( $input, $padLength, $padString = ' ', $padType = STR_PAD_RIGHT ) { $input = (string) $input; $strLen = iconv_strlen( $input, 'UTF-8' ); $padStrLen = iconv_strlen( $padString, 'UTF-8' ); if ( $strLen >= $padLength ) { return $input; } if ( $padType === STR_PAD_BOTH ) { return $this->strPad( $this->strPad( $input, $strLen + ceil( ( $padLength - $strLen ) / 2 ), $padString ), $padLength, $padString, STR_PAD_LEFT ); } $fullStrRepeats = (int) ( ( $padLength - $strLen ) / $padStrLen ); $partlyPad = iconv_substr( $padString, 0, ( ( $padLength - $strLen ) % $padStrLen ) ); $padding = str_repeat( $padString, $fullStrRepeats ) . $partlyPad; switch ( $padType ) { case STR_PAD_LEFT: return $padding . $input; case STR_PAD_RIGHT: default: return $input . $padding; } } } ?>