regex str_ireplace不适用于非ASCII字符

62lalag4  于 2023-06-25  发布在  其他
关注(0)|答案(3)|浏览(130)

我需要突出显示俄语文本中的搜索结果,但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

?>

有什么办法可以让它工作吗?我快绝望了。
简体中文

a2mppw5e

a2mppw5e1#

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

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

此外,您需要在正则表达式模式中引用特殊字符。

w7t8yxp5

w7t8yxp52#

如果使用非ASCII/多字节,则可以使用mb_eregi_replace
但去掉“

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

您还可以设置您的编码:

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

fumotvh33#

更换时下降:

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

相关问题