php substr,iconv_substr,mb_substr

php进行中文字符串的截取时,会经常用到二个函数iconv_substr和mb_substr,对这二个函数应该如何选择呢?参考下本文介绍的例子就明白了。

<?php
$str='123脚本学堂456欢迎大家的光临';
echo substr($str,0,4);
echo '<br>';
echo iconv_substr($str,0,4,'utf-8');
echo '<br>';
echo mb_substr($str,0,4,'utf-8');
?>

在字符编码中,03(ETX,End of Text)是一个控制字符,表示文本结束。在使用 iconv 进行编码转换时,如果输入字符串中包含 ETX 字符,可以通过以下方式进行处理: 1. 如果需要将 ETX 字符转换为其他字符,可以在输入字符串中将它替换为目标字符。例如,下面的代码将输入字符串中的 ETX 字符替换为 '\n' 字符: ```cpp std::string inputStr = "hello\x03world"; std::string targetStr = "\n"; std::string outputStr; size_t pos = inputStr.find('\x03'); if (pos != std::string::npos) { outputStr = inputStr.substr(0, pos) + targetStr + inputStr.substr(pos + 1); } else { outputStr = inputStr; } ``` 2. 如果不需要将 ETX 字符转换为其他字符,可以直接忽略它。例如,下面的代码演示了如何使用 iconv 将 UTF-8 编码的字符串转换为 GBK 编码的字符串,并忽略其中的 ETX 字符: ```cpp std::string inputStr = "hello\x03world"; std::string outputStr; // 创建 iconv 转换句柄 iconv_t cd = iconv_open("GBK", "UTF-8"); if (cd == (iconv_t)-1) { std::cout << "iconv_open failed!" << std::endl; return -1; } // 转换字符串 char* inbuf = const_cast<char*>(inputStr.c_str()); size_t inbytesleft = inputStr.length(); char outbuf[1024] = {0}; char* outptr = outbuf; size_t outbytesleft = sizeof(outbuf); size_t ret = iconv(cd, &inbuf, &inbytesleft, &outptr, &outbytesleft); if (ret == (size_t)-1) { std::cout << "iconv failed!" << std::endl; iconv_close(cd); return -1; } // 输出转换后的字符串 outputStr = std::string(outbuf, sizeof(outbuf) - outbytesleft); std::cout << outputStr << std::endl; // 关闭 iconv 转换句柄 iconv_close(cd); ``` 在编码转换过程中,需要注意 ETX 字符在输入字符串中的位置,以及转换后输出字符串的长度是否正确。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值