2012-05-11 73 views
0

我目前正在为服务器开发日志解析脚本,为了防止用户输入恶意命令,我需要过滤除字母数字字符以外的所有字符(同时允许下划线),但不幸的是我不知道该怎么做,所以我只是想知道如果有人能告诉/告诉我该怎么做才能实现这一点,谢谢!也作为一个例子,有人说输入以下内容:stack#@ _ over%flow,然后程序会过滤出非字母数字字符(除了下划线)以便产生正好的stack_overflow,这在bash中相当于如何过滤字符串,以便只允许字母数字字符通过

tr -dc [:alnum:]'_' 

也忘了提,我曾尝试以下,但仍遇到的一些问题(例如,如果一个包含在字符串中,我得到“!”“-bash:!”:事件未找到”

#include <stdio.h> 
#include <string.h> 
#include <ctype.h> 
int main(int argc, char ** argv) { 
    int i; 
    char *p; 
    if (argc > 1) { 
     for (p = argv[1]; *p != '\0'; p++) { 
      if (islower(*p) || isdigit(*p) || *p == '_') { 
       putchar (*p); 
      } 
     } 
     putchar ('\n'); 
    } 
    return 0; 
} 
+0

也是我试图跟随,但它仍然有一些问题(如上图所示编辑) – lacrosse1991

+0

如果您收到来自当你打电话给你的程序(这看起来不错,除了可以使用的字符isalnum)bash的错误,然后附上您程序参数用单引号括起来。 –

回答

3

找到您正在处理的字符串的长度,分配一个新长度的字符串,迭代输入字符串的每个字符,如果它是字母数字ic(使用ctype.h中的isalnum())将字符放在结果字符串中,否则就跳过它。空终止并将结果字符串复制到输入字符串,释放分配的字符串并返回结果。

+0

谢谢!为与之合作提供了很好的基础 – lacrosse1991

0

正则表达式(正则表达式)是一个很好的方法来做到这一点。 这里是an example来显示这个。

相关问题