我使用UTF8编码没有BOM多年来我的所有PHP脚本,他们工作正常。
今天我发现有一个名为zend.multibyte
的核心指令,默认为零(禁用)。
因此,如果它不影响脚本解析..它究竟会影响什么?
答案 0 :(得分:3)
ASCII兼容编码需要Zend Multibyte,例如来自pre-unodeode / pre-utf-8次的一些亚洲编码,并且主要在日本使用。启用时,解析器将检查mbstring.script_encoding并在解析时使用该编码。在内部进行一些转换时,应该避免这种情况,但对于某些用户来说,这是他们使用PHP的唯一方法。
答案 1 :(得分:0)
它的目的是影响脚本解析。正如约翰内斯所说,一种目的是用于与ASCII不兼容的编码。 (UTF-8与ASCII兼容,因此您不需要它。)
但是它也可以用于在编译时透明地转换脚本编码。出于某种原因说,您的文本编辑器只能另存为ANSI,但是您需要代码才能查看UTF-8。打开zend.multibyte并将脚本的编码声明为Windows-1252,可以将脚本编码为ANSI,PHP将透明地将其包含的字符串文字从ANSI转换为php.ini的internal_encoding指令中设置的编码(默认是UTF-8)。由于这是在编译时发生的,因此对于您的代码,您的脚本都将包含UTF-8。
您可以通过两种方法声明脚本的编码。
来自php.ini:
; If enabled, scripts may be written in encodings that are incompatible with
; the scanner. CP936, Big5, CP949 and Shift_JIS are the examples of such
; encodings. To use this feature, mbstring extension must be enabled.
; Default: Off
;zend.multibyte = Off
; Allows to set the default encoding for the scripts. This value will be used
; unless "declare(encoding=...)" directive appears at the top of the script.
; Only affects if zend.multibyte is set.
; Default: ""
;zend.script_encoding =