LXXXII. Multibyte String Functions简介While there are many languages in which every necessary character can be represented by a one-to-one mapping to a 8-bit value, there are also several languages which require so many characters for written communication that cannot be contained within the range a mere byte can code. Multibyte character encoding schemes were developed to express that many (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 these multibyte specific string functions that help you deal with multibyte encodings in PHP, which is basically supposed to be used with single byte encodings. In addition to that, mbstring handles character encoding conversion between the possible encoding pairs. mbstring is also designed to handle Unicode-based encodings such as UTF-8 and UCS-2 and many single-byte encodings for convenience (listed below), whereas mbstring was originally developed for use in Japanese web pages. 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. 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 的影响。
表格 1. mbstring configuration options
以下是配置选项的简要解释。
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.
资源类型本扩展模块未定义任何资源类型。 预定义常量以下常量由本扩展模块定义,因此只有在本扩展模块被编译到 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.
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 encoding is supported in this PHP extension:
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 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 work in a given multibyte environment. That's mostly because lots of 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 '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 the 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 is set for 7, mail, strings and regular expression functions should be overloaded. The list of overloaded functions are shown below. 表格 2. Functions to be overloaded
Basics of Japanese multi-byte encodingsIt is often said quite hard to figure out how Japanese texts are handled in the computer. This is not only because Japanese characters can only be represented by multibyte encodings, but because different encoding standards are adopted for different purposes / platforms. Moreover, not a few character set standards are used there, which are slightly different from one another. Those facts have often led developers to inevitable mess-up. To create a working web application that would be put in the Japanese environment, it is important to use the proper character encoding and character set for the task in hand.
ReferencesMultibyte character encoding schemes and the related issues are very complicated. There should be too few space to cover in sufficient details. Please refer to the following URLs and other resources for further readings.
Summaries of supported encodingsSummaries 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-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-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/2(R) and Microsoft(R) Windows(R). 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:
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||