Current Location: Home> Latest Articles> The replacement result is misunderstood as an array (actually a string)

The replacement result is misunderstood as an array (actually a string)

M66 2025-06-02

When using PHP for multibyte string processing, mb_eregi_replace is a very practical function that supports regular replacement of multibyte encoding and is case-insensitive. However, many developers encounter a confusion when using it: the replacement result looks like an array, but it is actually a string.

This article will analyze this phenomenon to help you correctly understand the return value type and usage of mb_eregi_replace .


What is mb_eregi_replace ?

mb_eregi_replace is a multi-byte regular replacement function provided by the PHP mbstring extension. Its function is similar to preg_replace , but it is optimized for the multi-byte character set. Its function prototype is as follows:

<code> string mb_eregi_replace ( string $pattern , string $replacement , string $string [, string $option = "msr" ] ) </code>

Parameter description:

  • $pattern : Regular expression pattern, case-insensitive.

  • $replacement : The replaced string.

  • $string : The target string to be searched for.

  • $option : Regular expression modifier, defaults to "msr" .

The return value is the replaced string.


Why does the replacement result look like an array?

In many cases, developers will find calls:

<code> $result = mb_eregi_replace('pattern', 'replacement', $subject); var_dump($result); </code>

An array-like structure will appear in the output result, for example:

<code> string(14) "Array(content)" </code>

This is actually because the replacement string $replacement contains variables or the $subject itself has an array-like string form, or the regular capture group reference is used in the $replacement , but the reference content is not processed correctly, resulting in the replaced string appearing to contain array information.

Another common misunderstanding is that regular capture groups (such as \\1 , $1 ) are understood as arrays, but in fact they are only manifested as text in strings.


Example of correct use

Suppose you have the following string:

<code> $subject = "Welcome to m66.net, which is a test string."; </code>

I want to use mb_eregi_replace to replace the domain name as example.com , and the writing method is as follows:

<code> $result = mb_eregi_replace('m66\.net', 'example.com', $subject); echo $result; </code>

Output:

<code> Welcome to example.com, which is a test string. </code>

What is returned here is the string type, and $result is not an array.


Misuse examples and reasons analysis

  1. The array type is used in the replacement string:

If $replacement is passed into an array, not a string, an error will be caused, but this will usually report an error and will not silently return a string that looks like an array.

  1. Misunderstanding the capture group used in the replacement content:

Suppose you use:

<code> $result = mb_eregi_replace('(m66\.net)', '$1.com', $subject); </code>

Here $1 is a capture group reference, but if it is not parsed correctly, it may cause the replaced string to become the literal $1.com , making people mistakenly think it is an array or a special structure.


in conclusion

  • mb_eregi_replace return value is always a string .

  • If you see the result "like array", check if the replacement string and the input string contain content that may cause confusion.

  • When using capture groups correctly, make sure the syntax is correct and avoid outputting unexpected content.

  • Using var_dump during debugging can help confirm variable types.


Attachment: Complete sample code

<code> <?php $subject = "Please visit m66.net for more information."; $pattern = "m66\.net"; $replacement = "example.com";

$result = mb_eregi_replace($pattern, $replacement, $subject);
echo $result; // Output: Please visit example.com for more information.
?>
</code>