Php 按长度拆分unicode字符串

Php 按长度拆分unicode字符串,php,arrays,string,unicode,preg-replace,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 = "सभी मनु

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

您必须使用str_split函数:

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

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


您也可以尝试使用。

wordwrap无法正确处理多字节字符串。你看过PHP手册页上的用户评论了吗?我得到了你在我的解决方案中提到的输出。请出示您的密码,以便我检查。
preg_match_all('~[[:graph:]][[:print:]]{0,30}(?!\S)~u', $smsContent, $m);
print_r($m[0]);