/** * UTF-8 aware replacement for trim(). * * Strip whitespace (or other characters) from the beginning and end of * a string. * * @param string $str The UTF-8 encoded string * @param mixed $stripchars The stripped characters * @param int $striptype The optional argument $striptype can be * UTF8_STRIP_BOTH, UTF8_STRIP_LEFT, or UTF8_STRIP_RIGHT. * If $striptype is not specified it is assumed to be * UTF8_STRIP_BOTH. * @return string The stripped string */ function utf8_strip($str, $stripchars = null, $striptype = UTF8_STRIP_BOTH) { static $defaults; global $unicode_separators_array; if ($stripchars === null) { if ($defaults === null) { foreach ($unicode_separators_array as $cp) { $defaults[] = utf8_chr($cp); } } $stripchars = $defaults; } elseif (is_array($stripchars)) { $chars = array(); foreach ($stripchars as $char) { if (($char = utf8_get_char($char)) !== false) { $chars[] = $char; } } $stripchars = $chars; } else { $stripchars = utf8_split($stripchars, 1); } $left = $striptype & UTF8_STRIP_LEFT; $right = $striptype & UTF8_STRIP_RIGHT; $rv = $buffer = ''; while ($char = utf8_get_char($str, $i)) { $state = in_array($char, $stripchars); if ($left) { if ($state) { continue; } else { $left = false; } } if ($right) { if ($state) { $buffer .= $char; continue; } else { $rv .= $buffer; $buffer = ''; } } $rv .= $char; } return $rv; }
/** * @dataProvider providerFailingUtf8Split */ public function testFailingUtf8SplitReturnValue($str, $chunklen) { $this->assertFalse(@utf8_split($str, $chunklen)); }
/** * utf8_rtrim( ) * * Strip whitespace or other characters from end of a UTF-8 string * @since 1.3 * * @param string $string The string to be trimmed * @param string $chrs Optional characters to be stripped * @return string The string with unwanted characters stripped from the right */ function utf8_rtrim($string = '', $chrs = '') { utf8_trim_util($string, $chrs); $s_look = utf8_split($string); $len = count($s_look); while ($len && isset($chrs[$s_look[$len - 1]])) { --$len; } return utf8_substr($string, 0, $len); }