Хорошо, поэтому я принял решение @ edson-medina и исправил ошибку и добавил некоторые модульные тесты. Вот три функции, которые мы используем, чтобы предоставить mb-копии для обрезки, rtrim и ltrim.
////////////////////////////////////////////////////////////////////////////////////
//Add some multibyte core functions not in PHP
////////////////////////////////////////////////////////////////////////////////////
function mb_trim($string, $charlist = null) {
if (is_null($charlist)) {
return trim($string);
} else {
$charlist = preg_quote($charlist, '/');
return preg_replace("/(^[$charlist]+)|([$charlist]+$)/us", '', $string);
}
}
function mb_rtrim($string, $charlist = null) {
if (is_null($charlist)) {
return rtrim($string);
} else {
$charlist = preg_quote($charlist, '/');
return preg_replace("/([$charlist]+$)/us", '', $string);
}
}
function mb_ltrim($string, $charlist = null) {
if (is_null($charlist)) {
return ltrim($string);
} else {
$charlist = preg_quote($charlist, '/');
return preg_replace("/(^[$charlist]+)/us", '', $string);
}
}
////////////////////////////////////////////////////////////////////////////////////
Вот юнит-тесты, которые я написал для тех, кто заинтересован:
public function test_trim() {
$this->assertEquals(trim(' foo '), mb_trim(' foo '));
$this->assertEquals(trim(' foo ', ' o'), mb_trim(' foo ', ' o'));
$this->assertEquals('foo', mb_trim(' Åfooホ ', ' Åホ'));
}
public function test_rtrim() {
$this->assertEquals(rtrim(' foo '), mb_rtrim(' foo '));
$this->assertEquals(rtrim(' foo ', ' o'), mb_rtrim(' foo ', ' o'));
$this->assertEquals('foo', mb_rtrim('fooホ ', ' ホ'));
}
public function test_ltrim() {
$this->assertEquals(ltrim(' foo '), mb_ltrim(' foo '));
$this->assertEquals(ltrim(' foo ', ' o'), mb_ltrim(' foo ', ' o'));
$this->assertEquals('foo', mb_ltrim(' Åfoo', ' Å'));
}
Похоже бесконечной рекурсии ко мне ... – knittl
облицовку() будут удалены символы, такие как ", \ т, \ г \ п, \ 0, \ x0B "и \ s модификатор как", \ t, \ r, \ n, \ v, \ f ", так что это не так, как вы хотите, я думаю. Чтобы удалить некоторые специальные символы из строки, вы всегда можете использовать trim ($ str, $ charlist) со вторым параметром. Можете ли вы написать несколько примеров символов, которые хотите удалить? – Naki
Какие символы вы хотите удалить, что trim() не удаляется? – Niko