zend.multibyte指令到底有什么影响?

时间:2013-06-18 13:58:43

标签: php php-ini

我使用UTF8编码没有BOM多年来我的所有PHP脚本,他们工作正常。 今天我发现有一个名为zend.multibyte的核心指令,默认为零(禁用)。

因此,如果它不影响脚本解析..它究竟会影响什么?

2 个答案:

答案 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。

您可以通过两种方法声明脚本的编码。

  1. 通过在php.ini中设置zend.script_encoding指令
  2. 通过在每个PHP的顶部添加declare(encoding=...); 文件。

来自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 =