# Function Overloading Feature

&warn.deprecated.feature-7-2-0.removed-8-0-0;

You might often find it difficult to get an existing PHP application to work in a given multibyte environment. This happens because most PHP applications out there are written with the standard string functions such as `substr`, which are known to not properly handle multibyte-encoded strings.

mbstring supports a 'function overloading' feature which enables you to add multibyte awareness to such an application without code modification by overloading multibyte counterparts on the standard string functions. For example, `mb_substr` is called instead of `substr` if function overloading is enabled. This feature makes it easy to port applications that only support single-byte encodings to a multibyte environment in many cases.

To use function overloading, set `mbstring.func_overload` in &php.ini; to a positive value that represents a combination of bitmasks specifying the categories of functions to be overloaded. It should be set to 1 to overload the `mail` function. 2 for string functions, 4 for regular expression functions. For example, if it is set to 7, mail, strings and regular expression functions will be overloaded. The list of overloaded functions are shown below.

## Functions to be overloaded

value of mbstring.func_overload | original function | overloaded function
1 | `mail` | `mb_send_mail`
2 | `strlen` | `mb_strlen`
2 | `strpos` | `mb_strpos`
2 | `strrpos` | `mb_strrpos`
2 | `substr` | `mb_substr`
2 | `strtolower` | `mb_strtolower`
2 | `strtoupper` | `mb_strtoupper`
2 | `stripos` | `mb_stripos`
2 | `strripos` | `mb_strripos`
2 | `strstr` | `mb_strstr`
2 | `stristr` | `mb_stristr`
2 | `strrchr` | `mb_strrchr`
2 | `substr_count` | `mb_substr_count`

It is not recommended to use the function overloading option in the per-directory context, because it's not confirmed yet to be stable enough in a production environment and may lead to undefined behaviour.