如何在PHP中拆分带重音的字符串?

时间:2015-07-27 13:01:53

标签: php string substr non-ascii-characters

我想拆分带有重音符号的hurgarian字符串。 现在我使用这段代码:

if(strlen($row['title'])<=20)
    {
        echo $row['title'];
    }
    else
    {
        echo substr($row['title'], 0, 17)." ...";
    }

我用数据库中的latin2_hungarian_ci编码存储这些数据,并在php文件中使用charset。 PHP和HTML部分:

header('Content-Type: text/html; charset=utf-8');

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

但是通过这种方式,如果最后一个字符是非英语字符(é,á,ö,ü,ó,ő,ú,ű,í),则表现不佳。反对这个角色出现了一个 辛博尔。 如果我不使用substr只是写出整个tite,那就行得很好。

现在举个例子: végzetrerekly ...或Északaszéless ...

我无法理解这个substr,因为在我的例子中,其中一个写了15个字符和那个simbol,从另一个16个字符和那个simbol。

如何写出所有x个字符?

3 个答案:

答案 0 :(得分:1)

使用iconv函数将字符集从latin2更改为utf-8,然后生成mb_substr

echo iconv("ISO-8859-2","UTF-8//TRANSLIT", $string);

答案 1 :(得分:0)

现在我尝试使用此代码:

function charfunction($myStr,$limit=17) {    
    $result = "";
    for($i=0; $i<$limit; $i++) {
        $result .= $myStr[$i];
    }
    return $result;    
}

并写出:

echo charfunction($row['title'])." ...";

$row['title']中的完整标题是Avégzetreklyéi - Csontváros

如果我使用$limit=17,它会写一个关于eékzet的电影......

如果我更改为$limit=18,则会写一个“végzetrereklyé”...

为两个字符计算 simbol。但是é角色在那个位置上显得 。 为什么呢?

答案 2 :(得分:0)

我用这种方式解决问题:

if(strlen($row['title'])<=20)
    {
        echo $row['title'];
    }
    else
    {
        $result = "";
        $alphas = range('A', 'Z');
        $last = substr($row['title'], 15, 16);
        $title = $row['title'];
        if($alphas != "%".$last."%")
        {
            for($i=0; $i<18; $i++) {
                $result .= $title[$i];
            }

        }
        else
        {
            for($i=0; $i<17; $i++) {
                $result .= $title[$i];
            }
        }
        echo $result." ...";
    }

谢谢大家的帮助!