downloads | documentation | faq | getting help | mailing lists | licenses | wiki | reporting bugs | php.net sites | links | conferences | my php.net

search for in the

mb_ereg_search_getpos> <mb_ereg_replace_callback
[edit] Last updated: Fri, 25 May 2012

view this page in

mb_ereg_replace

(PHP 4 >= 4.2.0, PHP 5)

mb_ereg_replaceОсуществляет замену по регулярному выражению с поддержкой многобайтовых символов

Описание

string mb_ereg_replace ( string $pattern , string $replacement , string $string [, string $option = "msr" ] )

Сканирует строку string для поиска совпадений с pattern, затем заменяет совпавший текст на replacement

Список параметров

pattern

Шаблон регулярного выражения.

В pattern могут использоваться многобайтовые символы.

replacement

Текст замены.

string

Проверяемая строка string.

option
Условие совпадения может быть установлено параметром option. Если в этом параметре указан модификатор i , будет игнорироваться регистр. Если указан модификатор x , будут игнорироваться пробелы. Если указан модификатор m , поиск совпадений будет выполняться в многострочном режиме, а '.' будет совпадать с символом конца строки. Если указан модификатор p , поиск совпадений будет выполняться в режиме POSIX; символ конца строки будет рассматриваться как обычный символ. Если указан модификатор e , строка replacement будет вычисляться как выражение PHP.

Возвращаемые значения

Результирующая строка string в случае успеха, или FALSE в случае ошибки.

Примечания

Замечание:

Для этой функции будет использована внутренняя кодировка или кодировка, установленная функцией mb_regex_encoding().

Внимание

Никогда не используйте модификатор e при работе с данными, полученными из недостоверных источников. Не выполняется никакого автоматического экранирования этих данных (в отличие от preg_replace()). Неучитывание данных требований, скорее всего, создаст уязвимость выполнения удаленного кода в вашем приложении.

Смотрите также

  • mb_regex_encoding() - Возвращает текущую кодировку для многобайтового регулярного выражения в виде строки
  • mb_eregi_replace() - Осуществляет замену по регулярному выражению с поддержкой многобайтовых символов без учета регистра



mb_ereg_search_getpos> <mb_ereg_replace_callback
[edit] Last updated: Fri, 25 May 2012
 
add a note add a note User Contributed Notes mb_ereg_replace
trng 15-Jun-2011 11:22
You can use \\n for capture group in replacement.
And you can NOT use $n notation (unlike preg_replace function).
Pluche 30-Dec-2010 05:17
Unlike preg_replace, mb_ereg_replace doesn't use separators

Exemple with preg_replace :
<?php $data = preg_replace("/[^A-Za-z0-9\.\-]/","",$data); ?>

Exemple with mb_ereg_replace :
<?php $data = mb_ereg_replace("[^A-Za-z0-9\.\-]","",$data); ?>
daemoneye at gmail dot com 03-Feb-2009 03:53
I got a pretty nasty error while trying to parse table rows(all contents were set to UTF-8) from the database for a dictionary project. The idea was to get all the rows from the first table (that is a table with bulgarian phrase in the first field, and its translation in english, french and german in the next fields). I needed to index all the bulgarian words that are found in the table to make an intelligent search. And that is where my headache started.

First of all, even with mb_strtolower() a lot of cyrillic characters went corrupted (ex: 'т,ъ,у,ф,б,г,з,ж,' etc...). After an hour of different attempts I got such a solution:

<?php

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

$rows = $db->getRows();

$contents = array();
foreach (
$rows as $eachRow)
{
   
$cleared = str_replace($commonWords, ' ', mb_strtolower(stripslashes($eachRow['bulgarian']), 'UTF-8' ));
    if (
trim($cleared) != '') $contents[] = trim($cleared);
}   

$list = array();
foreach (
$contents as $eachRow)
{
   
$exploded = explode(' ', $eachRow);
    foreach (
$exploded as $eachExpl)
    {
       
$eachExpl = mb_ereg_replace('[^а-я ]',' ', $eachExpl);
        if (
trim($eachExpl) != '')
            if (!
in_array($eachExpl, $list, true))    $list[] = trim($eachExpl);
    }
}

?>

To work properly I got to set all the internal encoding settings to UTF-8. Else the default Latin-1 got half my database with missing characters.

I am posting this solution just in case someone has encountered a similar problem. Hope it helps you in case you need something like that.
keizo at gomo dot jp 23-Jul-2008 11:32
<?php
$pattern
= "([あ-ん]+)[0-9]+";
$string = mb_ereg_replace($pattern, '「\\1」:\\0', $string);
?>

you can use \\n for capture group in replacement
gmx dot net at ulrich dot mierendorff 01-Jul-2008 09:39
If you want to replace characters like "ä" or "ø" you can use mb_ereg_replace, but it is very slow. str_replace is much faster and also works with characters like "ä" or "ø"!

I think this has something to with the fact that str_replace works on byte level and does not care about characters.
I hope that can help.
04-Dec-2006 09:36
'i' option does not work correctly with multibyte characters. The function does not locate/replace the multibyte string if it's different case then specified on multibyte needle which is in different case.
squeegee 01-Nov-2006 08:41
well, if you just calculated the length of the find and replace strings once instead of on every loop, it would likely speed it up a lot.
mpnicholas [@t] gmail (dot) com 09-Jul-2006 05:09
Regarding the mb_str_ireplace() function: I benchmarked it against mb_eregi_replace() for single-character substitution, and it was significantly slower. Despite avoiding the ereg call, I think the while loop ends slowing you down too much for this to be practical.
vondrej(at)gmail(dot)com 26-Feb-2006 04:47
Are you looking for htmlentities() for multibyte strings? This might help you - it just replace <, >, ", '

<?php
/**
 *  Multibyte equivalent for htmlentities() [lite version :)]
 *
 * @param string $str
 * @param string $encoding
 * @return string
 **/
function mb_htmlentities($str, $encoding = 'utf-8') {
   
mb_regex_encoding($encoding);
   
$pattern = array('<', '>', '"', '\'');
   
$replacement = array('&lt;', '&gt;', '&quot;', '&#39;');
    for (
$i=0; $i<sizeof($pattern); $i++) {
       
$str = mb_ereg_replace($pattern[$i], $replacement[$i], $str);
    }
    return
$str;
}
?>
faxe at neostrada dot pl 09-Aug-2005 05:52
A simple mb_str_ireplace() implementation - a faster (?) replacement for non-regexp multi-byte string replacement:

<?php
function mb_str_ireplace($co, $naCo, $wCzym)
{
   
$wCzymM = mb_strtolower($wCzym);
   
$coM    = mb_strtolower($co);
   
$offset = 0;
   
        while(!
is_bool($poz = mb_strpos($wCzymM, $coM, $offset)))
    {
       
$offset = $poz + mb_strlen($naCo);
       
$wCzym = mb_substr($wCzym, 0, $poz). $naCo .mb_substr($wCzym, $poz+mb_strlen($co));
       
$wCzymM = mb_strtolower($wCzym);
    }
   
    return
$wCzym;
}
?>

[thiago - EDITOR NOTE: This function has improvements from d-okumura [aat] fi{dot}kyd[dot]co.jp]

 
show source | credits | sitemap | contact | advertising | mirror sites