【问题标题】:Danish Æ being recognized as 2 letters instead of one丹麦语 Æ 被识别为 2 个字母而不是 1 个字母
【发布时间】:2012-08-08 12:05:20
【问题描述】:

我有一个像这样的简单代码:

echo strlen('Grækenland');

它返回 11 而不是预期的 10

服务器在丹麦,区域设置为丹麦,但它仍然返回 11...

【问题讨论】:

标签: php


【解决方案1】:

strlen 是朴素的 PHP 核心函数之一,它将字符串理解为字节数组并假设一个字节 == 一个字符。使用 mb_strlen 和正确的编码参数,根据字符串的编码实际计算字符数。

【讨论】:

  • 我会做出有根据的猜测,在这种情况下 UTF-8 是正确的编码,因为 æ 是 2 个字节,而其他字符在该编码中是 1 个字节长,这给出了 11 .
  • 感谢您的解释,这更有帮助(因为我不会那么依赖 strlen 和/或改用正确的函数)。
  • @user 确实如此。如果您想了解有关该主题的更多信息,请参阅我的个人资料以获取适当的文章。
【解决方案2】:
<?php
  echo mb_strlen('Grækenland', 'utf8');
?>

【讨论】:

    猜你喜欢
    • 2017-12-30
    • 1970-01-01
    • 1970-01-01
    • 2013-10-15
    • 1970-01-01
    • 2021-04-12
    • 1970-01-01
    • 2012-11-20
    • 1970-01-01
    相关资源
    最近更新 更多