zoukankan      html  css  js  c++  java
  • [原创] rtrim() 格式化中文问题

    先看以下代码

    var_dump(rtrim("互联网产品、", "、"));
    

    我们以为会得到结果 "互联网产品", 但实际上获得的是 ""互联网产��"

    为什么呢, 其实这是编码引起的问题.

    rtrim() 这个函数在处理字符时是按照ascii编码来处理, 先看一下 "互联网产品、" 的编码:

    $str = "互联网产品、";
    for ($i = 0; $i < strlen($str); $i++) {
        echo decbin(ord($str[$i])) . PHP_EOL;
    }
    
    /* Output
    11100100
    10111010
    10010010
    11101000
    10000001
    10010100
    11100111
    10111101
    10010001
    11100100
    10111010
    10100111
    11100101
    10010011
    10000001
    11100011
    10000000
    10000001
    */
    

    可以看出中文"品"的utf-8编码是 "11100101 10010011 10000001", 而中文符号 "、" 的utf-8编码是 "11100011 10000000 10000001"

    因此 rtrim() 在处理时会一并将 "品" 截掉最后一个字节, 剩下 "11100101 10010011", 从而引起乱码的问题.

  • 相关阅读:
    js禁止空格的输入
    js对cookie的读写操作
    js实现读秒
    formData的简单使用
    图形验证码笔记
    Redis安装
    ZooKeeper安装
    OpenJDK 编译-Linux环境
    Java环境变量-Linux环境
    ArchLinux+Win10双系统的Grub配置
  • 原文地址:https://www.cnblogs.com/youjiaxing/p/10794301.html
Copyright © 2011-2022 走看看