Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 大写括号后句子中的单词_Php_Regex_Function_Preg Match_Preg Match All - Fatal编程技术网

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:不,绝对不是。此函数不处理任何转义;您需要根据上下文对其进行转义。例如,如果要将标题插入数据库,请在插入之前转义它(最好使用)。我更新了答案,加入了一些一般性建议。希望有帮助!