首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >除缩略语外的字

除缩略语外的字
EN

Stack Overflow用户
提问于 2011-12-31 17:05:49
回答 3查看 3.1K关注 0票数 1

你如何转换这段文字:

美巴关系新低

在这篇文章中:

美巴关系新低

PHP的strtolower($string)将把“美国-巴基斯坦”变成“美国-巴基斯坦”。然而,我会要求来自巴基斯坦的首字母缩写"US“和"P”保持大写。我如何才能最好地做到这一点?

EN

回答 3

Stack Overflow用户

发布于 2011-12-31 17:18:32

查看ucwords()文档中的注释。它们涵盖了连字符和例外的这些问题,并提供了解决办法。

  • http://php.net/manual/en/function.ucwords.php
票数 3
EN

Stack Overflow用户

发布于 2011-12-31 17:25:14

至于美国:你需要一个数据库来存储大写的单词。PHP本身是愚蠢的,它不知道你指的是美国还是我们(指责我们)。因此,翻译不能决定美国在美国-巴基斯坦是意味着是缩写还是代名词。

有了这样的数据库,您就可以正常地调用您的上级函数。之后,您必须检查条目是否在数据库中,并将文本中的出现项替换为数据库中的条目。

代码语言:javascript
复制
$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不能知道一个单词是否是缩写,那么该怎么做。

在数据库中,您可能有这样的条目:

代码语言:javascript
复制
us-pakistan US-Pakistan
us-politician US-politician

或者,如果您想要实现它,甚至更高级:

代码语言:javascript
复制
us-* US-*

在这种情况下,您也可以使用大量的preg_replaces()来实现它,但是不要问我关于时间消耗的问题。我想这两种想法都很慢。

至于巴基斯坦:在破折号后保留信件更容易。在调用函数之前,您可以将-替换为由空格(空格)包围的-,然后PHP会认为它们都是单字。之后,你可以用一个简单的破折号来代替太空建筑。

代码语言:javascript
复制
str_replace(' - ', '-', strtolower(ucwords(str_replace('-', ' - ', $string))));

看看PHP-- Ayman发布的评论,我想他们对这个问题有更好的解决方案(我的答案是:“我脑海中出现的第一个最大短的解决方案是什么?”)

票数 2
EN

Stack Overflow用户

发布于 2015-09-15 15:04:20

您可以尝试以下代码来实现所需的results.In --这段代码首先将整个字符串转换为小写,然后使用ucword()函数获得标题大小写中的整个字符串,然后使用str_replace实现特定的输出。

代码:

代码语言:javascript
复制
<?php
$a="NEW LOW FOR US-PAKISTAN RELATIONS";
$b=ucwords(strtolower($a));
$c=str_replace("Us-pakistan","US-Pakistan","$b");
echo $c;
?>

输出:

代码语言:javascript
复制
New Low For US-Pakistan Relations
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8689390

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档