如何翻译此文:
美国与巴基斯坦关系的新低
进入本文:
美巴关系的新低
PHP的strtolower(ucwords($string))会将“US-PAKISTAN”变成“Us-pakistan”。但是,我要求巴基斯坦的首字母缩略词“US”和“P”保持大写。我怎样才能最好地实现这一目标?
答案 0 :(得分:3)
检查PHP ucwords()
文档中的注释。它们涵盖了这些连字符和例外问题,并提供了解决方案。
答案 1 :(得分:2)
至于美国:你需要一个存储大写单词的数据库。 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()来实现它,但不要问我时间消耗。我想这两个想法都很慢。
至于巴基斯坦:在破灭资本之后保留信件更容易。在调用函数之前,您可以将-
替换为-
包围空格( [space] - [space] ),然后PHP会认为它们都是单个单词。之后你可以用一个简单的破折号替换 [space] - [space] 构造。
str_replace(' - ', '-', strtolower(ucwords(str_replace('-', ' - ', $string))));
查看Ayman Safadi发布的PHP评论,我猜他们有更好的解决方案来处理这个问题(我只是说:“我想到的第一个最短的解决方案是什么?”)。
答案 2 :(得分:1)
您可以尝试以下代码来实现所需的结果。在此代码中我们首先将整个字符串转换为小写,然后使用ucwords()函数在标题大小写中获取整个字符串然后我们因此使用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 Relations