zoukankan      html  css  js  c++  java
  • PHP字符编码转换库iconv的一个细节

    先来看代码

    1 <?php
    2 $charset = 'GBK';
    3 $str = '中华人民共和国中华人民共和国中华人民共和国中华人民共和国';
    4 $size = 17;
    5 $str2 = iconv('UTF-8', $charset, $str);
    6 $str3 = substr($str2, 0, $size);//.$str2;
    7 $s = iconv($charset, 'UTF-8//IGNORE', $str3);
    8 
    9 var_dump($s);

    这里GBK因为一个汉字字符算2个英文字符 所以当长度为17的时候 会有字符破损

    经过转换UTF-8 并且忽略不合法字符的时候,结果竟然是 false 和文档中说的忽略字符

    返回值达不到预期效果,经过测试发现这种情况仅出现在末尾字符不合法的时候

    当拼接其他字符的时候(第六行注释掉的部分去掉)返回是达到预期的

    在命令行下测试iconv工具

    命令如下

    iconv -c -f gbk -t utf-8 input

    input为 17长度的$str3输出的内容

    结果iconv的输出是忽略了最后那半个破损的字符

    以下为无证大师原话

     c的iconv即使加//ignore也会返回错误码
    处理不处理要调用方决定
    但php没做
    因此,php巨烂
    等人喷
  • 相关阅读:
    CodeForcesGym 100524A Astronomy Problem
    ZOJ 2567 Trade
    HDU 3157 Crazy Circuits
    CodeForcesGym 100212E Long Dominoes
    UVALive 6507 Passwords
    [转]
    java socket
    Spark RDD Operations(2)
    Spark cache 和 persist
    vim 基础命令
  • 原文地址:https://www.cnblogs.com/toumingbai/p/8998353.html
Copyright © 2011-2022 走看看