小编PHP*_*Nut的帖子

是否真的PHP中的字符串文字只能编码为ASCII的兼容超集,如UTF-8或ISO-8859-1?

我从PHP手册的"字符串类型"页面的详细信息中看到以下文本:

鉴于PHP没有规定字符串的特定编码,人们可能想知道字符串文字是如何编码的.字符串将以脚本文件中编码的任何方式进行编码.因此,如果脚本是用ISO-8859-1编写的,则字符串将以ISO-8859-1编码,依此类推.但是,如果启用了Zend Multibyte,则不适用; 在这种情况下,脚本可以用任意编码(明确声明或检测到)编写,然后转换为某种内部编码,然后编码将用于字符串文字.请注意,对脚本的编码存在一些限制(或者在内部编码上,如果启用了Zend Multibyte) - 这几乎总是意味着此编码应该是ASCII的兼容超集,例如UTF-8或ISO-8859 -1.

所以我的疑问是,PHP中的字符串文字只能编码为ASCII的兼容超集编码,例如UTF-8ISO-8859-1,而不是编码不兼容的超集的ASCII

是否有可能以编码在PHP字符串文字在一些非ASCII兼容像编码UTF-16,UTF-32或一些其它这样的非ASCII兼容编码?如果是,那么在这种非ASCII兼容编码中编码的字符串文字是否可以与mb_string_*函数一起使用?如果不是,那是什么原因?

假设,Zend Multibyte已启用,我已将内部编码设置为兼容ASCII超集,例如UTF-8ISO-8859-1或其他一些非ASCII兼容编码.现在,我可以在脚本文件中声明不是ASCII 兼容超集的编码,例如UTF-16UTF-32吗?

如果是,那么在这种情况下编码字符串文字的编码是什么?如果不是,那是什么原因?

另外,如果启用了Zend Multibyte,请解释一下这个编码对于字符串文字是如何工作的?

如何启用Zend Multibyte?背后有什么把它的主要意图?当需要把它

如果你能用合适的例子清楚我的怀疑,那会更好.

谢谢.

php encoding ascii utf-8 non-ascii-characters

8
推荐指数
2
解决办法
437
查看次数

(二进制)强制转换实际上是做什么的,为什么不应该依赖它?

我正在使用PHP 7.2.12

我在PHP手册Type Casting部分遇到了以下声明:

PHP 5.2.1中添加了(二进制)强制转换和b前缀正向支持。请注意,(二进制)强制转换与(字符串)相同,但不可依赖。

我对上述文字不完全理解。有人请向我解释清楚。

我在同一页上研究了PHP手册中给出的以下代码示例:

<?php
$binary = (binary) $string;
var_dump($binary);
$binary = b"binary string";
var_dump($binary);
?>
Run Code Online (Sandbox Code Playgroud)

输出:

Notice: Undefined variable: string in ..... on line 2
string(0) ""
string(13) "binary string"
Run Code Online (Sandbox Code Playgroud)

如果您查看上面的输出,即使将其转换为二进制后,我也会得到相同的字符串。那么,二进制转换实际执行什么转换工作?

为什么不应该依赖二进制转换?

另外,请向我说明可以执行哪种类型的二进制转换?我的意思是合法的。

在PHP手册中,没有关于这方面的任何解释或理由。

请有人指导我正确的方向来帮助我。

php string binary types casting

0
推荐指数
1
解决办法
84
查看次数

为什么我在PHP中使用strlen()函数为同一个字符串获取两个不同的输出?

我在运行于Windows 10 Home Single Language 64位操作系统的机器上使用PHP 7.2.11.

我试过以下代码:

第1号代码片段

<?php
$str = 'abc\0def';
echo strlen($str); // Outputs 8
?>
Run Code Online (Sandbox Code Playgroud)

代码片段2

<?php
$str = "abc\0def";
echo strlen($str); // Outputs 7
?>
Run Code Online (Sandbox Code Playgroud)

我不明白为什么同一个函数为同一个字符串产生两个不同的输出?有一次它提供输出8和另一次7

为什么这样?

功能strlen()是二进制安全还是多字节安全?PHP手册没有在相应功能的页面上提到这些细节.

php strlen

-3
推荐指数
1
解决办法
33
查看次数

标签 统计

php ×3

ascii ×1

binary ×1

casting ×1

encoding ×1

non-ascii-characters ×1

string ×1

strlen ×1

types ×1

utf-8 ×1