我想拆分带有重音符号的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个字符?
答案 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." ...";
}
谢谢大家的帮助!