![]() | XCIII. Multibyte String FunctionsIntroduzioneWhile 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. 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.
Installazionembstring 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.
Configurazione di RuntimeIl comportamento di queste funzioni è influenzato dalle impostazioni di php.ini.
Tabella 1. mbstring configuration options
Breve descrizione dei parametri di configurazione.
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.
Tipi di risorseQuesta estensione non definisce alcun tipo di risorsa. Costanti predefiniteQueste costanti sono definite da questa estensione e sono disponibili solo se l'estensione è stata compilata nel PHP o se è stata caricata dinamicamente a runtime. 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 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. Tabella 2. Functions to be overloaded
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 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-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/2® and Microsoft® Windows®. 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:
| ![]() | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||