0

我正在将一些 asp 编码转换为 php,从我在 php 中所做的事情来看,有没有更好的方法来简化事情,所以我不编写额外的代码行?

ASP

xFirstName = LCase(Replace(request.form("xFirstName"), "'", "''"))
xFirstName = UCase(Left(xFirstName,1))& Mid(xFirstName,2)

php

$xFirstName = strtolower(str_replace("'","''",$_POST["xFirstName"]));
$xFirstName = strtoupper(substr($xFirstName,0,1)).substr($xFirstName,1);
4

3 回答 3

1
strtoupper(substr($xFirstName,0,1)).substr($xFirstName,1);

可以有效地替换为

ucfirst($xFirstName)

至于第一行,仍然需要 - 首先使字符串全部小写。虽然我会让 str_replace 成为最终操作,因为它可能会稍微增加字符串的长度。) 所以它变成了......

$xFirstName = str_replace("'", "''", 
    ucfirst(strtolower($_POST['xFirstName']))
);
于 2012-05-03T15:52:43.627 回答
1

似乎您想用双引号替换单引号并将单词的第一个字母大写,您可以这样做:

ucwords(strtolower(str_replace("'","''", $_POST['xFirstName'])));

这会将 $_POST 变量中传递的每个单词的第一个字母大写,因此如果您只想将第一个单词大写而不管 xFirstName 中有多少个单词,您应该使用ucfirst()而不是ucwords().

于 2012-05-03T15:47:00.930 回答
0

使用该功能时,问题将出在名称Peter O'Hara等方面,您最终会得到or 。Peter Clayton-MooreucwordsPeter O'haraPeter Clayton-moore

更好的解决方案是编写自己的函数,如下所示:

public function my_ucwords($name) {
    $name = ucwords(str_replace('\'', '\' ', str_replace('-', '- ', $name)));
    return str_replace('\' ', '\'', str_replace('- ', '-', $name));
}

然后继续这个:

$xFirstName = str_replace("'","''", my_ucwords(mb_strtolower($_POST["xFirstName"])));

别客气!

于 2012-05-03T16:00:47.753 回答