你如何转换这段文字:
美巴关系新低
在这篇文章中:
美巴关系新低
PHP的strtolower($string)将把“美国-巴基斯坦”变成“美国-巴基斯坦”。然而,我会要求来自巴基斯坦的首字母缩写"US“和"P”保持大写。我如何才能最好地做到这一点?
发布于 2011-12-31 17:18:32
查看ucwords()文档中的注释。它们涵盖了连字符和例外的这些问题,并提供了解决办法。
发布于 2011-12-31 17:25:14
至于美国:你需要一个数据库来存储大写的单词。PHP本身是愚蠢的,它不知道你指的是美国还是我们(指责我们)。因此,翻译不能决定美国在美国-巴基斯坦是意味着是缩写还是代名词。
有了这样的数据库,您就可以正常地调用您的上级函数。之后,您必须检查条目是否在数据库中,并将文本中的出现项替换为数据库中的条目。
$string = strtolower(ucwords($string));
$words = preg_split('/\s+/', $string);
foreach ($words as $word) {
// search case-independantly
if (null !== ($correctForm = searchDatabase($word))) {
str_replace($word, $correctFrom, $string);
}
}这可能不是最优的,但我希望它是可见的,如果PHP不能知道一个单词是否是缩写,那么该怎么做。
在数据库中,您可能有这样的条目:
us-pakistan US-Pakistan
us-politician US-politician或者,如果您想要实现它,甚至更高级:
us-* US-*在这种情况下,您也可以使用大量的preg_replaces()来实现它,但是不要问我关于时间消耗的问题。我想这两种想法都很慢。
至于巴基斯坦:在破折号后保留信件更容易。在调用函数之前,您可以将-替换为由空格(空格)包围的-,然后PHP会认为它们都是单字。之后,你可以用一个简单的破折号来代替太空建筑。
str_replace(' - ', '-', strtolower(ucwords(str_replace('-', ' - ', $string))));看看PHP-- Ayman发布的评论,我想他们对这个问题有更好的解决方案(我的答案是:“我脑海中出现的第一个最大短的解决方案是什么?”)
发布于 2015-09-15 15:04:20
您可以尝试以下代码来实现所需的results.In --这段代码首先将整个字符串转换为小写,然后使用ucword()函数获得标题大小写中的整个字符串,然后使用str_replace实现特定的输出。
代码:
<?php
$a="NEW LOW FOR US-PAKISTAN RELATIONS";
$b=ucwords(strtolower($a));
$c=str_replace("Us-pakistan","US-Pakistan","$b");
echo $c;
?>输出:
New Low For US-Pakistan Relationshttps://stackoverflow.com/questions/8689390
复制相似问题