Php 菲律宾比索–;为什么有些umlaut字符显示,而另一些字符显示';T

Php 菲律宾比索–;为什么有些umlaut字符显示,而另一些字符显示';T,php,character-encoding,output,special-characters,diacritics,Php,Character Encoding,Output,Special Characters,Diacritics,这是我目前正在使用的代码的简化版本——为什么在使用基本回显时工作正常,但在尝试只写入字符串的一部分时失败?我应该添加任何encode/decode/locale/utf来实现这一点吗?在这种情况下,如何实现 <meta charset="utf-8"> <?php /* setlocale (LC_ALL, "sv_SE.UTF-8"); //this just gives me � (questionmark in a square) instead of the actua

这是我目前正在使用的代码的简化版本——为什么在使用基本回显时工作正常,但在尝试只写入字符串的一部分时失败?我应该添加任何encode/decode/locale/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>');
?>

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

这是因为的第三个参数是
$charlist
,而不是
$charset

因此,当您使用
str\u word\u 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\u word\u count()
,则可以手动添加UTF-8字符:

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

哦,我没有想到我也拆分了UTF-8字符。为提供一种调试方法以及替代解决方案而欢呼–explode此时就足够了!
$words = str_word_count($str, 1, 'åäö');