|
PHP5中文手册
Multibyte String Functions简介While there are many languages in which every necessary character can be represented by a one-to-one mapping to an 8-bit value, there are also several languages which require so many characters for written communication that they cannot be contained within the range a mere byte can code (A byte is made up of eight bits. Each bit can contain only two distinct values, one or zero. Because of this, a byte can only represent 256 unique values (two to the power of eight)). Multibyte character encoding schemes were developed to express more than 256 characters in the regular bytewise coding system. When you manipulate (trim, split, splice, etc.) strings encoded in a multibyte encoding, you need to use special functions since two or more consecutive bytes may represent a single character in such encoding schemes. Otherwise, if you apply a non-multibyte-aware string function to the string, it probably fails to detect the beginning or ending of the multibyte character and ends up with a corrupted garbage string that most likely loses its original meaning. mbstring provides multibyte specific string functions that help you deal with multibyte encodings in PHP. In addition to that, mbstring handles character encoding conversion between the possible encoding pairs. mbstring is designed to handle Unicode-based encodings such as UTF-8 and UCS-2 and many single-byte encodings for convenience (listed below). PHP Character Encoding RequirementsEncodings of the following types are safely used with PHP.
These are examples of character encodings that are unlikely to work with PHP. JIS, SJIS, ISO-2022-JP, BIG-5 Although PHP scripts written in any of those encodings might not work, especially in the case where encoded strings appear as identifiers or literals in the script, you can almost avoid using these encodings by setting up the mbstring's transparent encoding filter function for incoming HTTP queries.
安装mbstring is a non-default extension. This means it is not enabled by default. You must explicitly enable the module with the configure option. See the Install section for details. The following configure options are related to the mbstring module.
运行时配置这些函数的行为受 php.ini 的影响。
以下是配置选项的简要解释。
According to the » HTML 4.01 specification, Web browsers are allowed to encode a form being submitted with a character encoding different from the one used for the page. See mb_http_input() to detect character encoding used by browsers. Although popular browsers are capable of giving a reasonably accurate guess to the character encoding of a given HTML document, it would be better to set the charset parameter in the Content-Type HTTP header to the appropriate value by header() or default_charset ini setting.
Example#1 php.ini setting examples ; Set default language mbstring.language = Neutral; Set default language to Neutral(UTF-8) (default) mbstring.language = English; Set default language to English mbstring.language = Japanese; Set default language to Japanese ;; Set default internal encoding ;; Note: Make sure to use character encoding works with PHP mbstring.internal_encoding = UTF-8 ; Set internal encoding to UTF-8 ;; HTTP input encoding translation is enabled. mbstring.encoding_translation = On ;; Set default HTTP input character encoding ;; Note: Script cannot change http_input setting. mbstring.http_input = pass ; No conversion. mbstring.http_input = auto ; Set HTTP input to auto ; "auto" is expanded to "ASCII,JIS,UTF-8,EUC-JP,SJIS" mbstring.http_input = SJIS ; Set HTTP2 input to SJIS mbstring.http_input = UTF-8,SJIS,EUC-JP ; Specify order ;; Set default HTTP output character encoding mbstring.http_output = pass ; No conversion mbstring.http_output = UTF-8 ; Set HTTP output encoding to UTF-8 ;; Set default character encoding detection order mbstring.detect_order = auto ; Set detect order to auto mbstring.detect_order = ASCII,JIS,UTF-8,SJIS,EUC-JP ; Specify order ;; Set default substitute character mbstring.substitute_character = 12307 ; Specify Unicode value mbstring.substitute_character = none ; Do not print character mbstring.substitute_character = long ; Long Example: U+3000,JIS+7E7E
Example#2 php.ini setting for EUC-JP users ;; Disable Output Buffering output_buffering = Off ;; Set HTTP header charset default_charset = EUC-JP ;; Set default language to Japanese mbstring.language = Japanese ;; HTTP input encoding translation is enabled. mbstring.encoding_translation = On ;; Set HTTP input encoding conversion to auto mbstring.http_input = auto ;; Convert HTTP output to EUC-JP mbstring.http_output = EUC-JP ;; Set internal encoding to EUC-JP mbstring.internal_encoding = EUC-JP ;; Do not print invalid characters mbstring.substitute_character = none
Example#3 php.ini setting for SJIS users ;; Enable Output Buffering output_buffering = On ;; Set mb_output_handler to enable output conversion output_handler = mb_output_handler ;; Set HTTP header charset default_charset = Shift_JIS ;; Set default language to Japanese mbstring.language = Japanese ;; Set http input encoding conversion to auto mbstring.http_input = auto ;; Convert to SJIS mbstring.http_output = SJIS ;; Set internal encoding to EUC-JP mbstring.internal_encoding = EUC-JP ;; Do not print invalid characters mbstring.substitute_character = none 资源类型本扩展模块未定义任何资源类型。 预定义常量以下常量由本扩展模块定义,因此只有在本扩展模块被编译到 PHP 中,或者在运行时被动态加载后才有效。 HTTP Input and OutputHTTP 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.
Example#5 php.ini setting example ;; Enable output character encoding conversion for all PHP pages ;; Enable Output Buffering output_buffering = On ;; Set mb_output_handler to enable output conversion output_handler = mb_output_handler
Example#6 Script example
<?php Supported Character EncodingsCurrently the following character encodings are supported by the mbstring module. Any of those Character encodings can be specified in the encoding parameter of mbstring functions. The following character encodings are supported in this PHP extension:
Any php.ini entry which accepts an encoding name can also use the values "auto" and "pass". mbstring functions which accept an encoding name can also use the value "auto". If "pass" is set, no character encoding conversion is performed. If "auto" is set, it is expanded to the list of encodings defined per the NLS. For instance, if the NLS is set to Japanese, the value is assumed to be "ASCII,JIS,UTF-8,EUC-JP,SJIS". See also mb_detect_order() Function Overloading FeatureYou 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.
Basics of Japanese multi-byte encodingsJapanese characters can only be represented by multibyte encodings, and multiple encoding standards are used depending on platform and text purpose. To make matters worse, these encoding standards differ slightly from one another. In order to create a web application which would be usable in a Japanese environment, a developer has to keep these complexities in mind to ensure that the proper character encodings are used.
ReferencesMultibyte character encoding schemes and their related issues are fairly complicated, and are beyond the scope of this documentation. Please refer to the following URLs and other resources for further information regarding these topics.
Summaries of supported encodings
Summaries of supported encodings
Name in the IANA character set registry:ISO-10646-UCS-4
Underlying character set:ISO 10646
Description:
The Universal Character Set with 31-bit code space, standardized as UCS-4
by ISO/IEC 10646. It is kept synchronized with the latest version of the
Unicode code map.
Additional note:
If this name is used in the encoding conversion facility,
the converter attempts to identify by the preceding BOM
(byte order mark)in which endian the subsequent bytes
are represented.
Name in the IANA character set registry:ISO-10646-UCS-4
Underlying character set:UCS-4
Description:
See above.
Additional note:
In contrast to UCS-4, strings are always assumed
to be in big endian form.
Name in the IANA character set registry:ISO-10646-UCS-4
Underlying character set:UCS-4
Description:
See above.
Additional note:
In contrast to UCS-4, strings are always assumed
to be in little endian form.
Name in the IANA character set registry:ISO-10646-UCS-2
Underlying character set:UCS-2
Description:
The Universal Character Set with 16-bit code space, standardized as UCS-2
by ISO/IEC 10646. It is kept synchronized with the latest version of the
unicode code map.
Additional note:
If this name is used in the encoding conversion facility,
the converter attempts to identify by the preceding BOM
(byte order mark)in which endian the subsequent bytes
are represented.
Name in the IANA character set registry:ISO-10646-UCS-2
Underlying character set:UCS-2
Description:
See above.
Additional note:
In contrast to UCS-2, strings are always assumed
to be in big endian form.
Name in the IANA character set registry:ISO-10646-UCS-2
Underlying character set:UCS-2
Description:
See above.
Additional note:
In contrast to UCS-2, strings are always assumed
to be in little endian form.
Name in the IANA character set registry:UTF-32
Underlying character set:Unicode
Description:
Unicode Transformation Format of 32-bit unit width, whose encoding space
refers to the Unicode's codeset standard. This encoding scheme wasn't
identical to UCS-4 because the code space of Unicode were limited to
a 21-bit value.
Additional note:
If this name is used in the encoding conversion facility,
the converter attempts to identify by the preceding BOM
(byte order mark)in which endian the subsequent bytes
are represented.
Name in the IANA character set registry:UTF-32BE
Underlying character set:Unicode
Description:See above
Additional note:
In contrast to UTF-32, strings are always assumed
to be in big endian form.
Name in the IANA character set registry:UTF-32LE
Underlying character set:Unicode
Description:See above
Additional note:
In contrast to UTF-32, strings are always assumed
to be in little endian form.
Name in the IANA character set registry:UTF-16
Underlying character set:Unicode
Description:
Unicode Transformation Format of 16-bit unit width. It's worth a note
that UTF-16 is no longer the same specification as UCS-2 because the
surrogate mechanism has been introduced since Unicode 2.0 and
UTF-16 now refers to a 21-bit code space.
Additional note:
If this name is used in the encoding conversion facility,
the converter attempts to identify by the preceding BOM
(byte order mark)in which endian the subsequent bytes
are represented.
Name in the IANA character set registry:UTF-16BE
Underlying character set:Unicode
Description:
See above.
Additional note:
In contrast to UTF-16, strings are always assumed
to be in big endian form.
Name in the IANA character set registry:UTF-16LE
Underlying character set:Unicode
Description:
See above.
Additional note:
In contrast to UTF-16, strings are always assumed
to be in little endian form.
Name in the IANA character set registry:UTF-8
Underlying character set:Unicode / UCS
Description:
Unicode Transformation Format of 8-bit unit width.
Additional note:none
Name in the IANA character set registry:UTF-7
Underlying character set:Unicode
Description:
A mail-safe transformation format of Unicode, specified in
» RFC2152.
Additional note:none
Name in the IANA character set registry:(none)
Underlying character set:Unicode
Description:
A variant of UTF-7 which is specialized for use in the
» IMAP protocol.
Additional note:none
Name in the IANA character set registry:
US-ASCII (preferred MIME name) / iso-ir-6 / ANSI_X3.4-1986 /
ISO_646.irv:1991 / ASCII / ISO646-US / us / IBM367 / CP367 / csASCII
Underlying character set:ASCII / ISO 646
Description:
American Standard Code for Information Interchange is a commonly-used
7-bit encoding. Also standardized as an international standard, ISO 646.
Additional note:(none)
Name in the IANA character set registry:
EUC-JP (preferred MIME name) /
Extended_UNIX_Code_Packed_Format_for_Japanese / csEUCPkdFmtJapanese
Underlying character set:
Compound of US-ASCII / JIS X0201:1997 (hankaku kana part) /
JIS X0208:1990 / JIS X0212:1990
Description:
As you see the name is derived from an abbreviation of Extended UNIX Code
Packed Format for Japanese, this encoding is mostly used on UNIX or
alike platforms. The original encoding scheme, Extended UNIX Code, is
designed on the basis of ISO 2022.
Additional note:
The character set referred to by EUC-JP is different to IBM932 / CP932,
which are used by OS/2R and MicrosoftR WindowsR.
For information interchange with those platforms, use EUCJP-WIN instead.
Name in the IANA character set registry:Shift_JIS (preferred MIME name) / MS_Kanji / csShift_JIS
Underlying character set:Compound of JIS X0201:1997 / JIS X0208:1997
Description:
Shift_JIS was developed in early 80's, at the time personal Japanese word
processors were brought into the market, in order to maintain
compatiblities with the legacy encoding scheme JIS X 0201:1976.
According to the IANA definition the codeset of Shift_JIS is slightly
different to IBM932 / CP932. However, the names "SJIS" / "Shift_JIS" are
often wrongly used to refer to these codesets.
Additional note:For the CP932 codemap, use SJIS-WIN instead.
Name in the IANA character set registry:(none)
Underlying character set:
Compound of JIS X0201:1997 / JIS X0208:1997 / IBM extensions / NEC extensions
Description:
While this "encoding" uses the same encoding scheme as EUC-JP,
the underlying character set is different. That is, some code points map
to different characters than EUC-JP.
Additional note:none
Name in the IANA character set registry:Windows-31J / csWindows31J
Underlying character set:
Compound of JIS X0201:1997 / JIS X0208:1997 / IBM extensions / NEC extensions
Description:
While this "encoding" uses the same encoding scheme as
Shift_JIS, the underlying character set is different. That means some code
points map to different characters than Shift_JIS.
Additional note:(none)
Name in the IANA character set registry:ISO-2022-JP (preferred MIME name) / csISO2022JP
Underlying character set:
US-ASCII / JIS X0201:1976 / JIS X0208:1978 / JIS X0208:1983
Description:» RFC1468
Additional note:(none)
Name in the IANA character set registry:JIS
Underlying character set:
Description:
Additional note:
Name in the IANA character set registry:ISO-8859-1
Underlying character set:
Description:
Additional note:
Name in the IANA character set registry:ISO-8859-2
Underlying character set:
Description:
Additional note:
Name in the IANA character set registry:ISO-8859-3
Underlying character set:
Description:
Additional note:
Name in the IANA character set registry:ISO-8859-4
Underlying character set:
Description:
Additional note:
Name in the IANA character set registry:ISO-8859-5
Underlying character set:
Description:
Additional note:
Name in the IANA character set registry:ISO-8859-6
Underlying character set:
Description:
Additional note:
Name in the IANA character set registry:ISO-8859-7
Underlying character set:
Description:
Additional note:
Name in the IANA character set registry:ISO-8859-8
Underlying character set:
Description:
Additional note:
Name in the IANA character set registry:ISO-8859-9
Underlying character set:
Description:
Additional note:
Name in the IANA character set registry:ISO-8859-10
Underlying character set:
Description:
Additional note:
Name in the IANA character set registry:ISO-8859-13
Underlying character set:
Description:
Additional note:
Name in the IANA character set registry:ISO-8859-14
Underlying character set:
Description:
Additional note:
Name in the IANA character set registry:ISO-8859-15
Underlying character set:
Description:
Additional note:
Name in the IANA character set registry:byte2be
Underlying character set:
Description:
Additional note:
Name in the IANA character set registry:byte2le
Underlying character set:
Description:
Additional note:
Name in the IANA character set registry:byte4be
Underlying character set:
Description:
Additional note:
Name in the IANA character set registry:byte4le
Underlying character set:
Description:
Additional note:
Name in the IANA character set registry:BASE64
Underlying character set:
Description:
Additional note:
Name in the IANA character set registry:HTML-ENTITIES
Underlying character set:
Description:
Additional note:
Name in the IANA character set registry:7bit
Underlying character set:
Description:
Additional note:
Name in the IANA character set registry:8bit
Underlying character set:
Description:
Additional note:
Name in the IANA character set registry:EUC-CN
Underlying character set:
Description:
Additional note:
Name in the IANA character set registry:CP936
Underlying character set:
Description:
Additional note:
Name in the IANA character set registry:HZ
Underlying character set:
Description:
Additional note:
Name in the IANA character set registry:EUC-TW
Underlying character set:
Description:
Additional note:
Name in the IANA character set registry:CP950
Underlying character set:
Description:
Additional note:
Name in the IANA character set registry:BIG-5
Underlying character set:
Description:
Additional note:
Name in the IANA character set registry:EUC-KR
Underlying character set:
Description:
Additional note:
Name in the IANA character set registry:UHC (CP949)
Underlying character set:
Description:
Additional note:
Name in the IANA character set registry:ISO-2022-KR
Underlying character set:
Description:
Additional note:
Name in the IANA character set registry:Windows-1251 (CP1251)
Underlying character set:
Description:
Additional note:
Name in the IANA character set registry:Windows-1252 (CP1252)
Underlying character set:
Description:
Additional note:
Name in the IANA character set registry:CP866 (IBM866)
Underlying character set:
Description:
Additional note:
Name in the IANA character set registry:KOI8-R
Underlying character set:
Description:
Additional note:
Table of Contents
|