按长度拆分 unicode 字符串 PHP

split unicode string by length PHP

我需要将 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:]:

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

demo

你也可以试试the grapheme functions from intl