default_charset
字符串被设置为"UTF-8"
,如在php.ini文档中所述。对于早期版本,该字符串为空。
由于我正在创建一个与PHP通信的Java库,因此需要知道当一个字符串被作为字节内部处理时应该期望哪些值。如果default_charset
字符串为空并且(字面)字符串包含ASCII范围之外的字符,那么会发生什么?我应该期望平台的默认字符编码,还是源文件使用的字符编码?
default_charset
字符串被设置为"UTF-8"
,如在php.ini文档中所述。对于早期版本,该字符串为空。
由于我正在创建一个与PHP通信的Java库,因此需要知道当一个字符串被作为字节内部处理时应该期望哪些值。如果default_charset
字符串为空并且(字面)字符串包含ASCII范围之外的字符,那么会发生什么?我应该期望平台的默认字符编码,还是源文件使用的字符编码?
对于字面字符串——总是使用源文件编码。 default_charset
值在这里无效。
PHP 字符串是 "二进制安全" 的,这意味着它们没有任何内部字符串编码。基本上,在 PHP 中字符串只是字节缓冲区。
对于字面字符串,例如$s = "Ä"
,这意味着字符串将包含在引号之间保存的任何字节。如果文件保存在UTF-8中,这将等同于$s = "\xc3\x84"
,如果文件保存在ISO-8859-1(latin1)中,则相当于$s = "\xc4"
。
设置 default_charset
值不会以任何方式影响存储在字符串中的字节。
default_charset
是干什么用的?一些函数必须处理作为文本的字符串,并且具有编码意识,接受 $encoding
作为参数(通常是可选的)。这告诉函数文本在字符串中编码的编码方式。
在 PHP 5.6 之前,这些可选的 $encoding
参数的默认值要么在函数定义中(例如 htmlspecialchars()
),要么可以在各种 php.ini 设置中为每个扩展单独配置(例如 mbstring.internal_encoding
,iconv.input_encoding
)。
在 PHP 5.6 中引入了新的 php.ini 设置 default_charset
。旧设置已被弃用,并且所有接受可选 $encoding
参数的函数现在应将编码默认为未明确指定时的 default_charset
值。
然而,开发人员需要确保字符串中的文本实际上是以指定的编码方式进行编码的。
链接:
default_charset
)。default_charset
选项的简短介绍。default_chaset
选项。file1.php
<?php
$string = "e";
echo mb_internal_encoding(); //ISO-8859-1
file2.php
<?php
$string = "É";
echo mb_internal_encoding(); //ISO-8859-1
如果您不手动更改内部编码,这两个文件都将输出ISO-8859-1。
<?php
echo bin2hex("ö"); //c3b6 (utf-8)
将这个字符的十六进制转换为UTF-8编码。如果您使用UTF-8保存文件,即使内部编码未设置为UTF-8,此示例中的字符串也将具有2个字节。因此,您应该依赖于源文件使用的字符编码。
é
- 你会得到é
还是é
? - Niet the Dark Absolé
,甚至是λ
...但这并不能完全回答我的问题...如果我保存为Latin并打印出éλ
,那么我得到相同的输出,看起来只是字节。 - Maarten Bodewes