首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Php函数UTF-8字符问题

Php函数UTF-8字符问题
EN

Stack Overflow用户
提问于 2013-09-17 08:40:33
回答 1查看 154关注 0票数 0

下面是我的函数,使句子的第一个单词的第一个字符大写:

代码语言:javascript
复制
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字符.见这个例子

我做错了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-09-17 08:43:11

让您的代码UTF-8知道的最简单的方法是使用函数,而不是在出现UTF-8的三种情况下使用简单的哑巴:

代码语言:javascript
复制
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字符串,并且您已经准备好:

代码语言:javascript
复制
mb_internal_encoding('UTF-8');
echo sentenceCase ("üias skdfnsknka");

奖金解决方案

对于UTF-8,您还可以使用正则表达式,这将导致代码减少:

代码语言:javascript
复制
$str = "üias skdfnsknka";
echo preg_replace_callback(
    '/((?:^|[!.?])\s*)(\p{Ll})/u',
    function($match) { return $match[1].mb_strtoupper($match[2], 'UTF-8'); },
    $str);
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18845123

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档