substring utf-8个字符,带有字母数字字符,最多10个字

时间:2012-11-07 08:37:37

标签: php substring multibyte mbstring

我在获取此字符串的子字符串时遇到问题:

GMOクラウドの芦田です。前回、OpenSocialに対応したSNSの「OpenPNE」をインストールしたので、今回はソーシャルアプリを作ってOpenPNE上で公開してみます。また、作ったアプリをmixiアプリとしてmixiにも登録してみましょう。

我只想显示最多第n个字符,或者至少不显示损坏/不完整的字词。

起初我试过了。

$content = "GMOクラウドの芦田です。前回、OpenSocialに対応したSNSの「OpenPNE」をインストールしたので、今回はソーシャルアプリを作ってOpenPNE上で公開してみます。また、作ったアプリをmixiアプリとしてmixiにも登録してみましょう。";
$content = mb_substr($content, 0, 10, 'UTF-8');

但结果是:

GMOクラウドの芦田です。前回、OpenSo

这个词不完整

我也尝试过使用正则表达式:

$content = "GMOクラウドの芦田です。前回、OpenSocialに対応したSNSの「OpenPNE」をインストールしたので、今回はソーシャルアプリを作ってOpenPNE上で公開してみます。また、作ったアプリをmixiアプリとしてmixiにも登録してみましょう。";
if (preg_match('/^.{1,40}\b/s', $content, $match))
{
    print_r($match);
}

导致:

Array ( [0] =>GMO )

可以做些什么来获得像

这样的东西
GMOクラウドの芦田です。前回、OpenSocial

字应该是完整的。我可以使用php中的mb_函数来完成此操作吗?

1 个答案:

答案 0 :(得分:0)

你需要像Mecab这样的形态分析工具将字符串转换为数组。可以通过命令行和PHP extension使用Mecab。如果您使用自制程序,请安装 mecab mecab-ipadic

$words = [
  'GMO', 'クラウド', 'の', '芦田', 'です。', '前回、', 
  'OpenSocial', 'に', '対応した', 'SNS'
];

$max = 26;

$ret = '';
$i = 0;

while(mb_strlen($ret.$words[$i], 'UTF-8') <= $max) {

  $ret .= $words[$i];
  $i += 1;
}

var_dump(
  mb_strlen($ret, 'UTF-8'),
  'GMOクラウドの芦田です。前回、OpenSocial' === $ret
);