如何使用 php 函数 mb_convert_case 并仅将某些单词转换为大写?

How can I use php function mb_convert_case and convert only certain words to upper?

我想传递这个输入

$string = "AL & JRL buSineSS CENTRE is the best";

预期结果:

AL & JRL Business Centre Is The Best

我试过下面的代码,但它转换了所有内容。

mb_convert_case($string, MB_CASE_TITLE, "UTF-8");

所以我认为您只是希望忽略潜在的首字母缩略词,对吗?好吧,有一些想法。首先,您可以编写一个脚本来忽略任何包含 3 个或更少字母的内容。在我看来,这不是一个很好的解决方案。 "it"、"the" 等呢?第二种是用字典把已知的单词放到运行ucwords()上。糟糕 - 对于这样一个看似简单的任务来说,这将是难以置信的繁重工作!

我建议直接忽略任何 all-caps。这样,无论首字母缩写词是什么(或长度),它都会忽略它。这样的事情可能就足够了:

$phrase = "Hello this is a TeSt pHrAse, to be tested ASAP. Thanks.";

$chunks = explode(" ", $phrase);

$result = "";

foreach($chunks as $chunk){
    if(!ctype_upper($chunk)) {
        $result .= ucwords($chunk) . " ";
    } else {
        $result .= $chunk . " ";
    }

}

$result = rtrim($result);

结果:

Hello This Is A Test Phrase, To Be Tested ASAP. Thanks.

这不是最优雅的解决方案,这只是我在阅读您的问题后一直在思考的问题。但是,如果您知道首字母缩略词 大写,这将完全跳过它们,只 title-case 您的实际单词。

注意事项

上面提供的示例不适用于通过破折号、下划线等连接到单词的首字母缩略词。这仅适用于间距。您可以轻松 根据您的需要调整以上内容,并使其更加智能。但是,我想非常清楚,这可能无法满足所有需求!

此外,此示例在您的示例短语中会显得很短。不幸的是,除非您使用字典或计算字符串长度,否则这是最接近的。此解决方案对大量功能来说是最少的工作。当然,带有比较的字典会很有效(无论是首字母缩略词字典还是单词字典)——但即便如此,也很难保持最新。名称将丢弃可以安全更改为 title-case 的单词字典。不太常用的首字母缩略词肯定不会出现在首字母缩略词词典中。不幸的是,所有解决方案都有无数的警告。选择最适合你的。

希望这对您有所帮助。如果您有任何其他问题,请发表评论,我会尽力提供帮助。

随机性

最后一件事。我用了ucwords()。随意使用任何你想要的。我相信您已经知道其中的区别,但请检查一下:

Best function for Title capitlization?

总是很高兴能够确切地知道哪种工具最适合这项工作。同样,我相信您知道自己的需求,并且我相信您选择了正确的工具。只是认为这是一本有趣的读物,可以帮助任何偶然发现这一点的人。

最后的想法

您可以结合使用上述示例来定制您自己的解决方案。通常将方法组合起来非常令人满意,从而减少每种方法的缺点。

希望对您有所帮助,祝您好运!