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

我有类似以下代码的代码,该代码声明一个类,其名称基于检索到的字符串.但是问题是该字符串可能包含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保持最新状态.

高温超导

上一篇:引用对象方法时是否应将其存储在变量中? (JavaScript)


下一篇:php-使函数在当前范围内设置变量