function mb_str_ireplace($search, $replace, $subject) { if(is_array($subject)) { $ret = array(); foreach($subject as $key => $val) { $ret[$key] = mb_str_ireplace($search, $replace, $val); } return $ret; } foreach((array) $search as $key => $s) { if($s == '') continue; $r = !is_array($replace) ? $replace : (array_key_exists($key, $replace) ? $replace[$key] : ''); $pos = mb_stripos($subject, $s); while($pos !== false) { $subject = mb_substr($subject, 0, $pos) . $r . mb_substr($subject, $pos + mb_strlen($s)); $pos = mb_stripos($subject, $s, $pos + mb_strlen($r)); } } return $subject; }
/** * * подсветка найденного текста * @param str $search_str * @param array $h_data_part * @param array $fields * @param bool $is_from_start_only =true когда поиск должен веститсь только по началу слова * @param str $start начальный маркер * @param str $end конечный маркер */ static function highlight_h_data($search_str, &$h_data_part = array(), $fields = array(), $is_from_start_only = true, $start = '<span class="highlight">', $end = '</span>') { if (!is_array($h_data_part)) { return; } foreach ($h_data_part as $k => $itm) { if (is_array($itm)) { a_handler::highlight_h_data($search_str, $h_data_part[$k], $fields); } elseif (in_array($k, $fields)) { $h_data_part[$k . '_hl'] = $itm; $len = mb_strlen($search_str); if (!$is_from_start_only) { $h_data_part[$k . '_hl'] = mb_str_ireplace($search_str, $start . mb_substr($itm, mb_stripos($itm, $search_str), $len) . $end, $itm); } elseif (mb_stripos($itm, $search_str) === 0) { //найдено вначале $h_data_part[$k . '_hl'] = $start . mb_substr($itm, 0, $len) . $end . mb_substr($itm, $len, mb_strlen($itm)); // mb_str_replace($search_str, $start.$search_str.$end, $itm); } } } }
function testMbStrIreplaceReplaceLinefeedSearch() { $str = "Iñtërnâtiônàli\nzætiøn"; $replaced = "Iñtërnâtiônàlisetiøn"; $this->assertSame(mb_str_ireplace("lI\nzÆ", 'lise', $str), $replaced); }