如何使用 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?
总是很高兴能够确切地知道哪种工具最适合这项工作。同样,我相信您知道自己的需求,并且我相信您选择了正确的工具。只是认为这是一本有趣的读物,可以帮助任何偶然发现这一点的人。
最后的想法
您可以结合使用上述示例来定制您自己的解决方案。通常将方法组合起来非常令人满意,从而减少每种方法的缺点。
希望对您有所帮助,祝您好运!
我想传递这个输入
$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?
总是很高兴能够确切地知道哪种工具最适合这项工作。同样,我相信您知道自己的需求,并且我相信您选择了正确的工具。只是认为这是一本有趣的读物,可以帮助任何偶然发现这一点的人。
最后的想法
您可以结合使用上述示例来定制您自己的解决方案。通常将方法组合起来非常令人满意,从而减少每种方法的缺点。
希望对您有所帮助,祝您好运!