endroid/qr-code lebel中文乱码,imagettftext因为enable-gd-jis-conv

作者:Liaodeity - 2021年11月10日

  排除字体的原因,如果使用了支持中文字体,且环境配置无误。

imagettftext()只支持UTF-8,由于enable-gd-jis-conv开启了,导致中文不是UTF-8编码,导致乱码出现。但是方法提供了可以包含十进制数字化字符表示(形式为:€)来访问字体中超过位置127 的字符。UTF-8 编码的字符串可以直接传递。

提供方法处理,传递前转换编码

function toEntities ($string)
{
    $len = strlen ($string);
    $buf = "";
    for ($i = 0; $i < $len; $i++) {
        if (ord ($string[ $i ]) <= 127) {
            $buf .= $string[ $i ];
        } else if (ord ($string[ $i ]) < 192) {
            //unexpected 2nd, 3rd or 4th byte
            $buf .= "&#xfffd";
        } else if (ord ($string[ $i ]) < 224) {
            //first byte of 2-byte seq
            $buf .= sprintf ("&#%d;",
                ((ord ($string[ $i + 0 ]) & 31) << 6) +
                (ord ($string[ $i + 1 ]) & 63)
            );
            $i   += 1;
        } else if (ord ($string[ $i ]) < 240) {
            //first byte of 3-byte seq
            $buf .= sprintf ("&#%d;",
                ((ord ($string[ $i + 0 ]) & 15) << 12) +
                ((ord ($string[ $i + 1 ]) & 63) << 6) +
                (ord ($string[ $i + 2 ]) & 63)
            );
            $i   += 2;
        } else {
            //first byte of 4-byte seq
            $buf .= sprintf ("&#%d;",
                ((ord ($string[ $i + 0 ]) & 7) << 18) +
                ((ord ($string[ $i + 1 ]) & 63) << 12) +
                ((ord ($string[ $i + 2 ]) & 63) << 6) +
                (ord ($string[ $i + 3 ]) & 63)
            );
            $i   += 3;
        }
    }

    return $buf;
}


本文作者: Liaodeity

本文链接: https://www.jianbaizhan.com/article/743

版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 3.0 许可协议。转载请注明出处!


 请勿发布不友善或者负能量的内容。审查将对发布广告等违规信息进行处罚!