PHP – 为什么有些元音变音字符显示,而另一些则不显示?

标签 php character-encoding output special-characters diacritics

这是我当前正在使用的代码的简化版本 - 为什么它在使用基本回显时工作正常,但在尝试仅写入字符串的一部分时失败?我应该添加任何编码/解码/区域设置/utf 来使其工作,在这种情况下如何?

<meta charset="utf-8">
<?php
/* setlocale (LC_ALL, "sv_SE.UTF-8"); //this just gives me � (questionmark in a square) instead of the actual char*/

$str = "Två trötta träslag står i skogens övre kant";
echo ($str); // works fine with å ä ö

$words = str_word_count($str, 1, 'UTF-8');

echo ('<br>');

$first = join(" ", array_slice($words, 0, 5));
$last = join(" ", array_slice($words, -5, 5));
echo($first); // doesn't show å ä ö
echo ('<br>'); 
echo($last); // doesn't show å ä ö
echo ('<hr>');
?>

输出:

Två trötta träslag står i skogens övre kant
Tv tr tta tr slag
r i skogens vre kant

我已经四处寻找一些最常见的建议,但要么我错误地实现了它们,要么它们一开始就不适合这个(在我的项目中,我将从 .txt 读取文本)文件(如果有任何区别)。

最佳答案

因为str_word_count()的第三个参数是 $charlist,而不是 $charset

因此,当您使用 str_word_count() 时,它不仅会拆分空格,还会拆分 UTF-8 字符。这很容易验证:

$str = "Två trötta träslag står i skogens övre kant";
print_r(str_word_count($str, 1));
/*
Array
(
    [0] => Tv
    [1] => tr
    [2] => tta
    [3] => tr
    [4] => slag
    [5] => st
    [6] => r
    [7] => i
    [8] => skogens
    [9] => vre
    [10] => kant
)
*/

对此有两种解决方案:如果您只想按空格分割,则可以使用此方法:

$words = explode(' ', $str);

但是,如果您执意要使用 str_word_count(),则可以手动添加 UTF-8 字符:

$words = str_word_count($str, 1, 'åäö');

关于PHP – 为什么有些元音变音字符显示,而另一些则不显示?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28246666/

相关文章:

azure - 如何从 terraform 中的输出值中删除大括号和引号

php - 如何设置 codeigniter 多级菜单的样式?

java - 生成格式错误的字符串以进行测试

groovy - 在 gradle 复制任务中设置 filter() 调用的编码

java - 抑制 QNMinimizer 的输出

c - 为什么我不能通过这段代码得到正确的输出?

php - 如何知道 MySQL 何时需要转义

php - CakePHP 生成器

php - 拉拉维尔 : How do I get records from pivot table whereby its foreign key does not reference a primary key?

python - fdb异常: 'utf-8' codec can't decode byte