我有这个函数,它在执行时会返回字符串中每个单词的第一个字母。
function initials($stringsoftext) {
$retturns = '';
foreach (explode(' ', $stringsoftext) as $word)
$retturns .= ($word[0]);
return $retturns;
}
一切正常。唯一的问题是,当单词以特殊字符开头时,它开始变得混乱。 例如,“testøkonomi”变为“t ”而不是“tø” 我怎么能纠正这个?
答案 0 :(得分:1)
这是因为$word[0]
获取字符串的第一个字节,而您正在使用多个再见编码。所以一个字符可能包含多个字节。如果是ø
字符,则由2个字节组成:0xC3 0xB8
这就是你如何提取第一个字符:
mb_substr($word, 0, 1, 'utf8')
答案 1 :(得分:1)
您应该将mb_substr
与mb_internal_encoding
一起使用,例如:
<?php
header('Content-Type: text/html; charset=UTF-8');
mb_internal_encoding('UTF-8');
echo initials('ąęść óęłęł');
function initials($stringsoftext) {
$retturns = '';
foreach (explode(' ', $stringsoftext) as $word) {
$retturns .= mb_substr($word,0,1);
}
return $retturns;
}
答案 2 :(得分:-2)
补充上面的各种答案,您可以将utf-8(准确地说,假设为utf-8)编码字符转换为其ISO 8859对应字符。 不需要多字节支持,因为在许多PHP配置中默认情况下不启用它。
使用utf8_encode()来执行此操作
<?php
function initials($stringsoftext) {
$retturns = '';
foreach (explode(' ', utf8_decode($stringsoftext)) as $word)
$retturns .= ($word[0]);
return $retturns;
}
echo initials("test økonomi");
//return tø
?>
编辑:如果转换的字符未在ISO 8859字符集(例如非拉丁符号)上定义,则此方法可能会中断。只是重申如果打开PHP多字节支持,mb_substr()解决方案当然是最合适的,因为它能够以utf8编码正确处理字符串。