0

我想传递这个输入

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

预期结果:

AL & JRL 商务中心是最好的

我已经尝试了下面的代码,但它可以转换所有内容。

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

1 回答 1

1

所以我认为您只是希望忽略潜在的首字母缩略词,对吗?嗯,有几个想法。首先,您可以编写一个忽略任何包含 3 个或更少字母的脚本。在我看来,这不是一个很好的解决方案。“它”、“该”等呢?第二个是使用已知单词的字典来运行ucwords()。糟糕——对于这样一个看似简单的任务来说,这将是令人难以置信的负担!

我建议简单地忽略所有大写的内容。这样,无论首字母缩写词是什么(或长度),它都会忽略它。这样的事情可能就足够了:

$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.

这不是最优雅的解决方案,这只是我在阅读您的问题后想到的。但是,如果您知道您的首字母缩略词大写,这将完全跳过它们,并且仅对您的实际单词进行标题大小写。

注意事项

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

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

希望这可以帮助。如果您还有任何问题,请发表评论,我会尽我所能提供帮助。

随机性

最后一件事。我用过ucwords()。随意使用任何你想要的东西。我确定您已经知道其中的区别,但请查看以下内容:

标题大写的最佳功能?

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

最后的想法

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

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

于 2016-02-11T22:06:48.240 回答