Php 大写括号后句子中的单词
我已经创建了一个函数,用于清除已发布的标题Php 大写括号后句子中的单词,php,regex,function,preg-match,preg-match-all,Php,Regex,Function,Preg Match,Preg Match All,我已经创建了一个函数,用于清除已发布的标题 function title_var($title_variable) { $title_variable = mysql_real_escape_string(ucwords(strtolower(trim(htmlspecialchars($title_variable, ENT_QUOTES))))); return stripslashes($title_variable); } 我现在需要能够使()或[]之间的任何内容都大写。例
function title_var($title_variable) {
$title_variable = mysql_real_escape_string(ucwords(strtolower(trim(htmlspecialchars($title_variable, ENT_QUOTES)))));
return stripslashes($title_variable);
}
我现在需要能够使()或[]之间的任何内容都大写。例如,“我的企业名称(cbs)有限公司”或“我的企业名称[cbs]有限公司”变为“我的企业名称(cbs)有限公司”,所有大写字母均为“cbs”
我已经完成了所有单词大写的第一部分,我只需要一种在括号之间大写的方法。始终使用基于上下文的转义
不要试图构建一个函数来处理所有可能的情况。别这样。这是毫无意义的。在函数中,您试图通过删除某些字符来“清除”字符串不能通过删除一组字符来清除字符串。这种想法是有缺陷的,因为您总是需要允许使用某些语法中特殊的字符
相反,根据要使用的上下文来处理字符串。例如:
- 如果要在SQL查询中使用此字符串,则必须使用预处理语句(or)来正确转义数据
- 如果要在HTML标记中输出此值,则需要使用转义数据
- 如果要将其用作命令行参数,则需要使用或
解决眼前的问题 使用来完成此任务。可以使用以下正则表达式匹配括号内的文本(包括括号): 说明:
-与开头括号匹配[\(\[]
-匹配中间的文本*?
-匹配右括号[\)\]
$m[0]
将包含整个匹配字符串。您只需使用将其转换为大写即可
修改您的函数后,它将变成:
function get_title($title) {
$title = ucwords(strtolower(trim($title, ENT_QUOTES)));
return preg_replace_callback('/[\(\[].*?[\)\]]/', function ($m) {
return strtoupper($m[0]);
}, $title);
}
始终使用基于上下文的转义
不要试图构建一个函数来处理所有可能的情况。别这样。这是毫无意义的。在函数中,您试图通过删除某些字符来“清除”字符串不能通过删除一组字符来清除字符串。这种想法是有缺陷的,因为您总是需要允许使用某些语法中特殊的字符
相反,根据要使用的上下文来处理字符串。例如:
- 如果要在SQL查询中使用此字符串,则必须使用预处理语句(or)来正确转义数据
- 如果要在HTML标记中输出此值,则需要使用转义数据
- 如果要将其用作命令行参数,则需要使用或
解决眼前的问题 使用来完成此任务。可以使用以下正则表达式匹配括号内的文本(包括括号): 说明:
-与开头括号匹配[\(\[]
-匹配中间的文本*?
-匹配右括号[\)\]
$m[0]
将包含整个匹配字符串。您只需使用将其转换为大写即可
修改您的函数后,它将变成:
function get_title($title) {
$title = ucwords(strtolower(trim($title, ENT_QUOTES)));
return preg_replace_callback('/[\(\[].*?[\)\]]/', function ($m) {
return strtoupper($m[0]);
}, $title);
}
。它们不再得到维护。看到了吗?相反,学习,并使用or-将帮助您决定哪一个。如果您选择PDO,谢谢@esqew。我将很快尝试切换到MySQLi,但是有大约40-45个网站需要更改,加上他们使用的我自己的CMS——作为一个人的乐队——这是一个很大的工作!你知道有没有一种简单的方法来切换?查找“mysql_query()”的所有实例并将其更改为新的MySQLi版本?请参阅。。它们不再得到维护。看到了吗?相反,学习,并使用or-将帮助您决定哪一个。如果您选择PDO,谢谢@esqew。我将很快尝试切换到MySQLi,但是有大约40-45个网站需要更改,加上他们使用的我自己的CMS——作为一个人的乐队——这是一个很大的工作!你知道有没有一种简单的方法来切换?例如查找“mysql_query()”的所有实例并将其更改为新的MySQLi版本?请参阅.Hi@Amal。对不起,如果你再次阅读我的帖子,我想在单词周围保留括号(任何类型),如“我的企业名称(CBS)有限公司”或“我的企业名称[CBS]有限公司”。干杯,谢谢你,这太完美了!所以在你看来,使用ENT_引号和mysql_real_escape_字符串组合在一起是过度杀戮?表单是公共的,我试图阻止mysql注入。那么仅仅使用ENT_引号就足够了?G@WOWDesign:不,绝对不是。此函数不处理任何转义;您需要根据上下文对其进行转义。例如,如果要将标题插入数据库,请在插入之前转义它(最好使用)。我更新了答案,加入了一些一般性建议。希望有帮助!你好,阿马尔。对不起,如果你再次阅读我的帖子,我想在单词周围保留括号(任何类型),如“我的企业名称(CBS)有限公司”或“我的企业名称[CBS]有限公司”。干杯,谢谢你,这太完美了!所以在你看来,使用ENT_引号和mysql_real_escape_字符串组合在一起是过度杀戮?表单是公共的,我试图阻止mysql注入。那么仅仅使用ENT_引号就足够了?G@WOWDesign:不,绝对不是。此函数不处理任何转义;您需要根据上下文对其进行转义。例如,如果要将标题插入数据库,请在插入之前转义它(最好使用)。我更新了答案,加入了一些一般性建议。希望有帮助!