下面是我的函数,使句子的第一个单词的第一个字符大写:
function sentenceCase($str)
{
$cap = true;
$ret = '';
for ($x = 0; $x < strlen($str); $x++) {
$letter = substr($str, $x, 1);
if ($letter == "." || $letter == "!" || $letter == "?") {
$cap = true;
} elseif ($letter != " " && $cap == true) {
$letter = strtoupper($letter);
$cap = false;
}
$ret .= $letter;
}
return $ret;
}它将“样本句”转换为“样本句”。问题是,它没有大写UTF-8字符.见这个例子。
我做错了什么?
发布于 2013-09-17 08:43:11
让您的代码UTF-8知道的最简单的方法是使用函数,而不是在出现UTF-8的三种情况下使用简单的哑巴:
function sentenceCase($str)
{
$cap = true;
$ret = '';
for ($x = 0; $x < mb_strlen($str); $x++) { // mb_strlen instead
$letter = mb_substr($str, $x, 1); // mb_substr instead
if ($letter == "." || $letter == "!" || $letter == "?") {
$cap = true;
} elseif ($letter != " " && $cap == true) {
$letter = mb_strtoupper($letter); // mb_strtoupper instead
$cap = false;
}
$ret .= $letter;
}
return $ret;
}然后,您可以将mbstring配置为使用UTF-8字符串,并且您已经准备好:
mb_internal_encoding('UTF-8');
echo sentenceCase ("üias skdfnsknka");奖金解决方案
对于UTF-8,您还可以使用正则表达式,这将导致代码减少:
$str = "üias skdfnsknka";
echo preg_replace_callback(
'/((?:^|[!.?])\s*)(\p{Ll})/u',
function($match) { return $match[1].mb_strtoupper($match[2], 'UTF-8'); },
$str);https://stackoverflow.com/questions/18845123
复制相似问题