ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

清理PHP中合法变量名称的字符串

2019-10-31 23:32:34  阅读:387  来源: 互联网

标签:variables sanitization string php class


我有类似以下代码的代码,该代码声明一个类,其名称基于检索到的字符串.但是问题是该字符串可能包含PHP不能接受为类名的非法字符.因此,在将其用作类名之前,有没有一种好的方法可以对字符串进行清理?

$retrieved_string = 'some unformatted string; it may contain illegal characters to be passed as a class name.';

$strMyScript = basename(__FILE__, ".php"); 
$strMyScript = sanitize_variable($strMyScript);
$strClassName = sanitize_variable($retrieved_string);

eval('
    class ' . $strMyScript . '_' . $strClassName . ' extends AnotherClass {
        // some code here
    }
');

funaction sanitize_variable($string) {
    // sanitize the string
}

解决方法:

首先确定您需要什么过滤器或验证器.验证器将返回true / false.然后,您可以引发异常,为用户产生错误或仅忽略文件.另一种选择是使用过滤器,该过滤器将有效地从输入字符串中删除字符.

public function sanitize($input)
{
    $pattern = '/[^a-zA-Z0-9]/';

    return preg_replace($pattern, '', (string) $input);
}

您可能还需要检查unicode.模式是:

public function sanitize($input)
{
    if (!@preg_match('/\pL/u', 'a'))
    {
        $pattern = '/[^a-zA-Z0-9]/';
    }
    else
    {
        $pattern = '/[^\p{L}\p{N}]/u';
    }
    return preg_replace($pattern, '', (string) $input);
}

还应考虑的问题:

>您要启用空白支持吗?在这种情况下,您将需要在$pattern变量中添加一个空格.
>文件名是否使用英语以外的其他语言?然后,您将需要进行一些特定于语言环境的操作,以使$pattern保持最新状态.

高温超导

标签:variables,sanitization,string,php,class
来源: https://codeday.me/bug/20191031/1979346.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有