Multi-Byte String FunctionsMulti-Byte String
&reftitle.intro;
There are many languages in which all characters can be expressed
by single byte. Multi-byte character codes are used to express
many characters for many languages. mbstring
is developed to handle Japanese characters. However, many
mbstring functions are able to handle
character encoding other than Japanese.
A multi-byte character encoding represents single character with
consecutive bytes. Some character encoding has shift(escape)
sequences to start/end multi-byte character strings. Therefore, a
multi-byte character string may be destroyed when it is divided
and/or counted unless multi-byte character encoding safe method
is used. This module provides multi-byte character safe string
functions and other utility functions such as conversion
functions.
Since PHP is basically designed for ISO-8859-1, some multi-byte
character encoding does not work well with PHP. Therefore, it is
important to set mbstring.internal_encoding to
a character encoding that works with PHP.
PHP4 Character Encoding Requirements
Per byte encoding
Single byte characters in range of 00h-7fh
which is compatible with ASCII
Multi-byte characters without 00h-7fh
These are examples of internal character encoding that works with
PHP and does NOT work with PHP.
Character encoding, that does not work with PHP, may be converted
with mbstring's HTTP input/output conversion
feature/function.
SJIS should not be used for internal encoding unless the reader
is familiar with parser/compiler, character encoding and
character encoding issues.
If you use databases with PHP, it is recommended that you use the
same character encoding for both database and internal
encoding for ease of use and better performance.
If you are using PostgreSQL, it supports character
encoding that is different from backend character encoding. See
the PostgreSQL manual for details.
&reftitle.install;
mbstring is an extended module. You must
enable the module with the configure script.
Refer to the Install section for
details.
The following configure options are related to the
mbstring module.
: Enable
mbstring functions. This option is
required to use mbstring functions.
As of PHP 4.3.0, the option
will be enabled by default and replaced with
to support Chinese, Korean and Russian language support.
Japanese character encoding is supported by default.
If
is used, simplified chinese encoding will be supported.
If
is used, traditional chinese encoding will be supported.
If
is used, korean encoding will be supported.
If
is used, russian encoding will be supported.
If
is added, all supported character encoding in mbstring
will be enabled, but the binary size of PHP will be
maximized because of huge Unicode character maps.
Note that Chinese, Korean and Russian encoding is
experimentally supported in PHP 4.3.0.
:
Enable HTTP input character encoding conversion using
mbstring conversion engine. If this
feature is enabled, HTTP input character encoding may be
converted to mbstring.internal_encoding
automatically.
As of PHP 4.3.0, the option
will be eliminated and replaced with
mbstring.encoding_translation.
HTTP input character encoding conversion is enabled
when this is set to On
(the default is Off).
: Enable
regular expression functions with multibyte character support.
&reference.mbstring.ini;
&reftitle.resources;
&no.resource;
&reference.mbstring.constants;
HTTP Input and Output
HTTP input/output character encoding conversion may convert
binary data also. Users are supposed to control character
encoding conversion if binary data is used for HTTP
input/output.
If enctype for HTML form is set to
multipart/form-data,
mbstring does not convert character encoding
in POST data. If it is the case, strings are needed to be
converted to internal character encoding.
HTTP Input
There is no way to control HTTP input character
conversion from PHP script. To disable HTTP input character
conversion, it has to be done in &php.ini;.
Disable HTTP input conversion in &php.ini;
When using PHP as an Apache module, it is possible to
override PHP ini setting per Virtual Host in
httpd.conf or per directory with
.htaccess. Refer to the Configuration section and
Apache Manual for details.
HTTP Output
There are several ways to enable output character encoding
conversion. One is using &php.ini;, another
is using ob_start with
mb_output_handler as
ob_start callback function.
For PHP3-i18n users, mbstring's output
conversion differs from PHP3-i18n. Character encoding is
converted using output buffer.
&php.ini; setting exampleScript example
]]>
Supported Character Encodings
Currently, the following character encoding is supported by the
mbstring module. Character encoding may
be specified for mbstring functions'
encoding parameter.
The following character encoding is supported in this PHP
extension:
UCS-4, UCS-4BE,
UCS-4LE, UCS-2,
UCS-2BE, UCS-2LE,
UTF-32, UTF-32BE,
UTF-32LE, UCS-2LE,
UTF-16, UTF-16BE,
UTF-16LE, UTF-8,
UTF-7, ASCII,
EUC-JP, SJIS,
eucJP-win, SJIS-win,
ISO-2022-JP, JIS,
ISO-8859-1, ISO-8859-2,
ISO-8859-3, ISO-8859-4,
ISO-8859-5, ISO-8859-6,
ISO-8859-7, ISO-8859-8,
ISO-8859-9, ISO-8859-10,
ISO-8859-13, ISO-8859-14,
ISO-8859-15, byte2be,
byte2le, byte4be,
byte4le, BASE64,
7bit, 8bit and
UTF7-IMAP.
As of PHP 4.3.0, the following character encoding support will be added
experimentaly :
EUC-CN, CP936, HZ,
EUC-TW, CP950, BIG-5,
EUC-KR, UHC (CP949),
ISO-2022-KR,
Windows-1251 (CP1251),
Windows-1252 (CP1252),
CP866,
KOI8-R.
&php.ini; entry, which accepts encoding name,
accepts "auto" and
"pass" also.
mbstring functions, which accepts encoding
name, and accepts "auto".
If "pass" is set, no character
encoding conversion is performed.
If "auto" is set, it is expanded to
"ASCII,JIS,UTF-8,EUC-JP,SJIS".
See also mb_detect_order
"Supported character encoding" does not mean that it
works as internal character code.
Overloading PHP string functions with multi byte string functions
Because almost PHP application written for language using
single-byte character encoding, there are some difficulties for
multibyte string handling including japanese. Almost PHP string
functions such as substr do not support
multibyte string.
Multibyte extension (mbstring) has some PHP string functions
with multibyte support (ex. substr supports
mb_substr).
Multibyte extension (mbstring) also supports 'function
overloading' to add multibyte string functionality without
code modification. Using function overloading, some PHP string
functions will be oveloaded multibyte string functions.
For example, mb_substr is called
instead of substr if function overloading
is enabled. Function overload makes easy to port application
supporting only single-byte encoding for multibyte application.
mbstring.func_overload in &php.ini; should be
set some positive value to use function overloading.
The value should specify the category of overloading functions,
sbould be set 1 to enable mail function overloading. 2 to enable
string functions, 4 to regular expression functions. For
example, if is set for 7, mail, strings, regex functions should
be overloaded. The list of overloaded functions are shown in
below.
Functions to be overloadedvalue of mbstring.func_overloadoriginal functionoverloaded function1mailmb_send_mail2strlenmb_strlen2strposmb_strpos2strrposmb_strrpos2substrmb_substr4eregmb_ereg4eregimb_eregi4ereg_replacemb_ereg_replace4eregi_replacemb_eregi_replace4splitmb_split
Basics of Japanese multi-byte characters
Most Japanese characters need more than 1 byte per character. In
addition, several character encoding schemas are used under a
Japanese environment. There are EUC-JP, Shift_JIS(SJIS) and
ISO-2022-JP(JIS) character encoding. As Unicode becomes popular,
UTF-8 is used also. To develop Web applications for a Japanese
environment, it is important to use the character set for the
task in hand, whether HTTP input/output, RDBMS and E-mail.
Storage for a character can be up to six
bytes
A multi-byte character is usually twice of the width compared
to single-byte characters. Wider characters are called
"zen-kaku" - meaning full width, narrower characters are
called "han-kaku" - meaning half width. "zen-kaku" characters
are usually fixed width.
Some character encoding defines shift(escape) sequence for
entering/exiting multi-byte character strings.
ISO-2022-JP must be used for SMTP/NNTP.
"i-mode" web site is supposed to use SJIS.
References
Multi-byte character encoding and its related issues are very
complex. It is impossible to cover in sufficient detail
here. Please refer to the following URLs and other resources for
further readings.
Unicode/UTF/UCS/etc
http://www.unicode.org/
Japanese/Korean/Chinese character
information
ftp://ftp.ora.com/pub/examples/nutshell/ujip/doc/cjk.inf
&reference.mbstring.functions;