PHP中的字符串文字是否只能以ASCII的兼容超集(如UTF-8或ISO-8859
我从
PHP手册的
Details of the String Type页面中看到以下文本:
所以我的疑问是,PHP中的字符串文字只能编码为ASCII的兼容超集,例如UTF-8或ISO-8859-1,而不是编码不兼容的超集,这是真的吗?的ASCII? 是否可以在PHP中使用UTF-16,UTF-32或其他一些非ASCII兼容编码等非ASCII兼容编码对字符串文字进行编码?如果是,那么在这种非ASCII兼容编码中编码的字符串文字是否可以与mb_string_ *函数一起使用?如果不是,那是什么原因? 假设,Zend Multibyte已启用,我已将内部编码设置为兼容的ASCII超集,例如UTF-8或ISO-8859-1或其他一些非ASCII兼容编码.现在,我可以在脚本文件中声明不是ASCII兼容超集的编码,例如UTF-16或UTF-32吗? 如果是,那么在这种情况下编码字符串文字的编码是什么?如果不是,那是什么原因? 另外,如果启用了Zend Multibyte,请解释一下这个编码对于字符串文字是如何工作的? 如何启用Zend Multibyte?打开它的主要目的是什么?什么时候需要打开它? 如果你能用合适的例子清楚我的怀疑,那会更好. 谢谢.
PHP源代码文件中的字符串文字字面上被视为源代码文件中存在的原始字节.如果您的源代码中有字节代表UTF-16字符串或其他任何字符串,那么您可以直接使用它们:
$echo -n '<?php echo "' > test.php $echo -n 日本語 | iconv -t UTF-16 >> test.php $echo '";' >> test.php $cat test.php <?php echo "??e?g,??"; $cat test.php | xxd 00000000: 3c3f 7068 7020 6563 686f 2022 feff 65e5 <?php echo "..e. 00000010: 672c 8a9e 223b 0a g,..";. $php test.php ??e?g,??$ $php test.php | iconv -f UTF-16 日本語 这演示了一个表面上用ASCII编写的源代码文件,但在中间包含一个UTF-16字符串文字,按原样输出. 这种源代码的更大问题是难以使用.它介于颈部疼痛之间,不可能让文本编辑器在一个编码中处理PHP代码,在另一个编码中处理字符串文字.通常,您希望将整个源代码(包括字符串文字)保持在一个相同的编码中. 您也可以轻松陷入困境: $echo -n '<?php echo "' > test.php $echo -n 漢字 | iconv -t UTF-16 >> test.php $echo '";' >> test.php $cat test.php | xxd 00000000: 3c3f 7068 7020 6563 686f 2022 feff 6f22 <?php echo "..o" 00000010: 5b57 223b 0a [W";. “汉字”这里编码为feff 6f22 5b57,其中包含22或“,一个字符串文字终结符,这意味着你现在有语法错误. 默认情况下,PHP解释器期望PHP代码与ASCII兼容,因此如果您希望将字符串文字和其余源代码保持为相同的编码,那么您几乎只能使用ASCII兼容编码.但是,Zend Multibyte扩展允许您使用其他编码,如果您相应地声明使用的编码(在php.ini中,如果它不兼容ASCII).因此,您可以在整个过程中编写源代码,例如Shift-JIS;甚至可能在某些其他编码中使用字符串文字*. *(此时我将退出详细信息,因为what is wrong with you ?!) 摘要: > PHP必须了解所有PHP代码;默认情况下它理解ASCII,使用Zend Multibyte它也可以理解其他编码. 说完这一切之后,与ASCII兼容编码不同,通常是颈部疼痛.如果工作流程中的某些工具不正确地处理文件,那么文本编辑器会很痛苦并且容易导致mojibake.最多我建议使用与ASCII兼容的编码,例如: echo "日本語"; // UTF-8 encoded (let's hope) 如果必须具有非ASCII兼容的字符串文字,则应使用字节表示法: echo "xfexffx65xe5x67x2cx8ax9e"; 或转换: echo iconv('UTF-8','UTF-16','日本語');
当然,PHP中的字符串是所有意图和目的的原始字节数组.你怎么获得那个字符串并不重要.如果您使用上面演示的任何方法获得的UTF-16字符串,包括通过将其以UTF-16硬编码到源代码中,您有一个UTF-16编码的字符串,您可以通过任何和所有字符串函数将其放入知道如何处理它. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |