str_replace不适用于非ASCII字符

时间:2011-03-07 16:10:17

标签: php regex search

我需要用俄语强调文本中的搜索结果,但是当查询具有不同的情况时,str_ireplace()就不起作用了。我已经尝试了manual中所有我想要的东西,但没有任何效果。在这里我尝试过:

<?php
setlocale (LC_ALL, 'ru_RU');
$query = 'ПрОбЛеМа';
$result = 'Эта проблема нам не знакома.';

$result = str_ireplace($query, "<strong>$query</strong>", $result); // does not work
$result = preg_replace("/($query)/i", '<strong>$1</strong>', $result); // does not work
$result = mb_eregi_replace("$query", "<strong>$query</strong>", $result); // does not work
$result = ext_str_ireplace($query, "<strong>$query</strong>", $result); // from php.net - does not work
$result = highlightStr($result, $query); // from php.net - does not work

?>

有什么方法可以让它发挥作用吗?我在这里绝望了。

PHP 5.3.3

3 个答案:

答案 0 :(得分:3)

如果将“u”(unicode)修饰符添加到preg_replace,它应该可以工作:

$result = preg_replace("/($query)/ui", '<strong>$1</strong>', $result);

答案 1 :(得分:2)

如果使用非ASCII /多字节

,则可以使用mb_eregi_replace

但删除“

$result = mb_eregi_replace($query, "<strong>$query</strong>", $result);

您也可以设置编码:

mb_internal_encoding("UTF-8");
mb_regex_encoding("UTF-8");

答案 2 :(得分:1)

付诸代替:

function mb_str_ireplace ($search, $replace, $subject, &$replacements) 
{
    return preg_replace("/$search/ui", $replace, $subject, -1, $replacements);
} 
相关问题