PHP   发布时间:2022-04-04  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了php mb_convert_case()保留大写单词大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

假设我有一个字符串“ HET1200文本字符串”,我需要将其更改为“ HET1200文本字符串”.编码为UTF-8.

我怎样才能做到这一点?当前,我使用mb_convert_case($String,MB_CASE_titlE,“ UTF-8”);但这会将“ HET1200”更改为“ Het1200”.

我可以指定一个例外,但这不会详尽无遗.所以我宁愿所有大写单词都保持大写.

谢谢 :)

解决方法:

好的,让我们尝试尽可能接近地重新创建mb_convert_case,但是仅更改每个单词的第一个字符.

@H_22_0@mb_convert_case实现的相关部分是这样的

@R_489_4407@ = 0; 

for (i = 0; i < unicode_len; i+=4) {
    int res = PHP_unicode_is_prop(
        BE_ARY_TO_UINT32(&unicode_ptr[i]),
        UC_MN|UC_ME|UC_CF|UC_LM|UC_SK|UC_LU|UC_LL|UC_LT|UC_PO|UC_OS, 0);
    if (modE) {
        if (res) {
            UINT32_TO_BE_ARY(&unicode_ptr[i],
                PHP_unicode_tolower(BE_ARY_TO_UINT32(&unicode_ptr[i]),
                    _src_encoding TSRMLS_CC));
        } else {
            mode = 0;
        }   
    } else {
        if (res) {
            mode = 1;
            UINT32_TO_BE_ARY(&unicode_ptr[i],
                PHP_unicode_totitle(BE_ARY_TO_UINT32(&unicode_ptr[i]),
                    _src_encoding TSRMLS_CC));
        }
    }
}

基本上,这将执行以下操作:

>将模式设置为0.模式将确定我们是否在单词的第一个字符中.如果为0,则为0,否则为0.
>遍历字符串中的字符.

>确定它是哪种字符.

>如果是文字字符,请将res设置为1.更具体地说,如果它具有属性标记,非间距”,“标记,包含”,“其他,格式”,“字母,修饰符”,“符号,修饰符”,“字母,大写字母”,则将其设置为1, “字母,小写字母”,“字母,标题大写字母”,“标点符号,其他”或“其他,替代”.奇怪的是,不包括“其他字母”.

>如果我们不是一个字的开头

>如果我们使用文字字符,请将其转换为小写–这是我们不想要的.
>否则,我们就不会出现单词字符,而是将mode设置为0来表示我们正在移至单词的开头.

>如果我们只是一个单词的开始,而我们确实有一个单词字符

>将此字符转换为首字母大写
>表示我们不再是一个单词的开头.

@H_22_0@mbString扩展名似乎没有公开字符属性.这给我们带来了一个问题,因为我们没有办法确定一个字符是否具有mb_convert_case测试的10个属性中的任何一个.

幸运的是,unicode character properties in regex可以在这里拯救我们.

忠实地复制mb_convert_case并将其转换为小写字母成为问题:

function mb_convert_case_utf8_variation($s) {
    $arr = preg_split("//u", $s, -1, PREG_SPLIT_NO_EMPTY);
    $result = "";
    $mode = false;
    foreach ($arr as $char) {
        $res = preg_match(
            '/\\p{Mn}|\\p{ME}|\\p{Cf}|\\p{Lm}|\\p{Sk}|\\p{Lu}|\\p{Ll}|'.
            '\\p{Lt}|\\p{Sk}|\\p{Cs}/u', $char) == 1;
        if ($modE) {
            if (!$res)
                $mode = false;
        }
        elseif ($res) {
            $mode = true;
            $char = mb_convert_case($char, MB_CASE_titlE, "UTF-8");
        }
        $result .= $char;
    }

    return $result;
}

测试:

echo mb_convert_case_utf8_variation("HETÁ1200 Ááxt ítring uii");

给出:

HETÁ1200 Ááxt Ítring Uii

大佬总结

以上是大佬教程为你收集整理的php mb_convert_case()保留大写单词全部内容,希望文章能够帮你解决php mb_convert_case()保留大写单词所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: