微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

清理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保持最新状态.

高温超导

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐