按长度PHP拆分unicode字符串

时间:2018-02-08 04:40:17

标签: php arrays string unicode preg-replace

我需要将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个字符的长值,但似乎不正确。而且我还需要防止单词分裂。

2 个答案:

答案 0 :(得分:1)

您不能使用基于字节数的方法,因为您的字符串包含多字节字符并最终组合字符。你必须通过字形工作。可以使用字符类[:graph:][:print:]

来实现
preg_match_all('~[[:graph:]][[:print:]]{0,30}(?!\S)~u', $smsContent, $m);
print_r($m[0]);

demo

您也可以尝试使用the grapheme functions from intl

答案 1 :(得分:0)

您必须使用str_split()功能:

$smsContent = "सभी मनुष्यों कोगौरव और अधिकारों के मामले में जनजात स्वतंत्रता और समानता प्राप्त है | उन्हें बुद्धि और अन्तरात्मा कि देन प्राप्त है |";
$output = str_split($smsContent, 70);
print_r($output);