【问题标题】:How can I split a string with accents in PHP?如何在 PHP 中拆分带有重音符号的字符串?
【发布时间】:2015-07-27 13:01:52
【问题描述】:

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

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

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

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

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

但是如果最后一个字符是非英文字符(é,á,ö,ü,ó,ő,ú,ű,í),这样就不会显示得很好。针对这个字符出现了一个符号。 如果我不使用 substr,只需写出全部内容,一切都很好。

现在例如: A végzet erekly... 或 Északi széless...

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

如何写出所有字符的前 x 个字符?

【问题讨论】:

  • 问题不在于子字符串,而在于$row['title'] 中的文本。将您的数据库编码为UTF-8
  • 看看mb_substr()
  • 我尝试了 utf-8 数据库编码和mb_substr(),但没有任何反应。

标签: php string substr non-ascii-characters


【解决方案1】:

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

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

【讨论】:

  • 我不能使用iconv(),它写的是未定义的函数。我试过utf8_decode,但现在每个非英文字符都错了。
  • 连接后是否有执行查询SET NAMES 'utf8' 将数据库和应用程序之间的通信字符集更改为utf8?
  • 我尝试了使用和不使用SET NAMES 'utf8',但没有任何改变。
【解决方案2】:

现在我尝试使用此代码:

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

然后写出:

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

$row['title'] 中的全称是 A végzet ereklyéi - Csontváros

如果我使用$limit=17,它会写成 A végzet erekly ...

如果我更改为 $limit=18,它会写成 A végzet ereklyé ...

计算两个字符的符号。但是 é 字符是在它出现的那个位置。 为什么?

【讨论】:

    【解决方案3】:

    我用这种方式解决问题:

    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." ...";
        }
    

    谢谢大家的帮助!

    【讨论】:

      猜你喜欢
      • 2018-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-06
      • 1970-01-01
      • 2013-08-03
      • 2021-12-12
      • 2014-06-01
      相关资源
      最近更新 更多