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