我需要将Unicode代码字符串拆分为70个字符。因此结果数组中的值将包含70个字符的长字符串。以下是我的代码
$msg = preg_replace('/[\r\n]+/', ' ', $smsContent);
$chunks = wordwrap($msg, 70, '\n');
$chunks = explode('\n', $chunks);
//print_r($chunks);
但结果数组包含不同长度的值 这是一个例子
$smsContent = "सभी मनुष्यों कोगौरव और अधिकारों के मामले में जनजात स्वतंत्रता और समानता प्राप्त है | उन्हें बुद्धि और अन्तरात्मा कि देन प्राप्त है |";
结果:
Array
(
[0] => सभी मनुष्यों कोगौरव और अधि
[1] => कारों के मामले में जनजात स�
[2] => �वतंत्रता और समानता प्राप्
[3] => त है | उन्हें बुद्धि और अन्त
[4] => रात्मा कि देन प्राप्त है |
)
我需要将其拆分为70个字符的长值,但似乎不正确。而且我还需要防止单词分裂。
答案 0 :(得分:1)
您不能使用基于字节数的方法,因为您的字符串包含多字节字符并最终组合字符。你必须通过字形工作。可以使用字符类[:graph:]
和[:print:]
:
preg_match_all('~[[:graph:]][[:print:]]{0,30}(?!\S)~u', $smsContent, $m);
print_r($m[0]);
您也可以尝试使用the grapheme functions from intl。
答案 1 :(得分:0)
您必须使用str_split()
功能:
$smsContent = "सभी मनुष्यों कोगौरव और अधिकारों के मामले में जनजात स्वतंत्रता और समानता प्राप्त है | उन्हें बुद्धि और अन्तरात्मा कि देन प्राप्त है |";
$output = str_split($smsContent, 70);
print_r($output);