【问题标题】:PHP difference between Single-byte strings and Multi-byte stringsPHP单字节字符串和多字节字符串的区别
【发布时间】:2014-07-12 08:53:41
【问题描述】:

对于傻瓜来说,在 PHP 中,单字节字符串和多字节字符串有什么区别,在什么情况下我们应该考虑一种或另一种?

对于单字节字符串(例如 US-ASCII、ISO 8859 系列等),请使用 substr 和多字节字符串(例如 UTF-8、UTF-16 等)使用 mb_substr:

// singlebyte strings
$result = substr($myStr, 0, 5);
// multibyte strings
$result = mb_substr($myStr, 0, 5);

例如,如果我打算开发一些在中国使用的东西,我是否需要因为它们的特殊性而采取任何特殊措施? 'utf-8 编码不够好吗?

【问题讨论】:

  • PHP 不理解 UTF-8,你需要告诉它你的字符串是 UTF-8(就像中文字符一样),然后使用 'mb_x' 函数来处理它们。请注意,“mb_x”函数每 1 个字符处理 x 字节,而非“mb_x”函数每字符处理 1 个字节。
  • 该死!谢谢,但这是一个复杂的解释人
  • 无论字符集如何,您始终可以使用 mb_ 函数,并且在安全站点上

标签: php


【解决方案1】:

函数strlen(单字节)返回完整计数字节,函数mb_strlen返回计数字符!

字符可以有超过 1 个字节(例如 UTF-8)。

以你为例:

$myStr = '៘៥឴ឨឆ';
$result = substr($myStr, 0, 5);
$result = mb_substr($myStr, 0, 5, mb_detect_encoding($myStr));

本例中的函数substr返回无效值,因为字符多一个字节,但函数mb_substr返回正确的数据。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-28
    • 2014-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-14
    • 1970-01-01
    相关资源
    最近更新 更多