You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP向网络打印机打印阿拉伯文出现乱码,请求技术支持

解决PHP向网络打印机打印阿拉伯文本乱码问题

阿拉伯文本打印乱码核心原因是编码不匹配:PHP字符串默认是UTF-8,而多数支持阿拉伯文的网络打印机(使用9100端口的ESC/POS协议设备)默认识别Windows-1256(CP1256)编码,同时阿拉伯文是从右到左书写,需要额外开启RTL打印模式。

解决步骤及修改后代码

关键调整点

  • 发送ESC/POS命令切换打印机字符集为CP1256
  • 开启右到左(RTL)打印模式(部分打印机需要)
  • 将UTF-8字符串转换为CP1256编码后发送
  • 修正原代码中错误的连接关闭方法
$ar = "عربي";

try {
    // 建立与打印机的socket连接
    $fp = fsockopen("10.1.10.21", 9100);
    if (!$fp) {
        throw new Exception("无法连接到打印机");
    }

    // ESC/POS命令:切换字符集至Windows-1256(十进制21对应十六进制0x15)
    $switchCharset = chr(0x1B) . chr(0x74) . chr(0x15);
    fputs($fp, $switchCharset);

    // 开启右到左打印模式(部分打印机需调整命令,参考设备手册)
    $rtlMode = chr(0x1B) . chr(0x72) . chr(0x01);
    fputs($fp, $rtlMode);

    // 将UTF-8编码的阿拉伯文本转换为Windows-1256编码
    $arCp1256 = iconv("UTF-8", "Windows-1256//TRANSLIT", $ar);
    fputs($fp, $arCp1256);

    // 发送换行和切纸命令(可选,根据打印需求调整)
    fputs($fp, "\n\n");
    fputs($fp, chr(0x1D) . chr(0x56) . chr(0x41) . chr(0x00));

    // 正确关闭socket连接
    fclose($fp);
    echo 'Successfully Printed';
} catch (Exception $e) {
    echo 'Caught exception: ', $e->getMessage(), "\n";
}

额外注意事项

  • 不同品牌打印机的字符集切换命令可能不同,比如部分设备用ESC t 17对应CP1256,请查阅打印机的ESC/POS官方手册确认正确的命令参数。
  • 若转码时出现字符丢失,可尝试移除//TRANSLIT参数,或确认字符在Windows-1256编码中有对应映射。
  • 部分高端打印机支持直接打印UTF-8文本,但需要发送特定命令开启UTF-8模式,需参考设备文档配置。

内容的提问来源于stack exchange,提问作者M.Honi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 17:56:22