我写了一个正则,用来获取用户输入内容中的会员信息。$input="[会员:11021]" //这个是会员输入的,这里为了直观,我先给他值了;
$content = eregi_replace("\[会员:([0-9]{5,6})\]",get_username("\\1"),$$input);  //获取到ID后,把ID交给get_username函数处理下面是函数://这样能正常输出东西
function get_username($id){
return $id;
}
下面是函数://这样就报错了
function get_username($id){
$sql="select * from `user` where `id`=$id";
$rs=mysql_query($sql);
$row=mysql_fetch_array($rs);
}上面代码应该是变量ID的类型不对
//这样获取到的$id竟然成了 空白
function get_username($id){
return intval($id);
}
大家懂我的意思没有啊?就是当正则获取懂那个$id后,交给函数处理,函数的参数是$id,那个id的类型不能自动转换为数字型,也不能用intval转换成数字型,怎么办?怎么办啊?

解决方案 »

  1.   

    PHP会自动转换类型的,应该不是数字型的错误,你把错误代码发出来或者你把你SQL语句打印出来看看
      

  2.   

    出错的函数,需要return没返回值,当然空白了
      

  3.   

    是这样的,我刚才试了一下这个: $id="11021";
    echo intval($id);竟然输出是空白,那个SQL语言是没错误的,我这里只是写了SQL,其实在程序里面我是又要把ID交给另外一个函数处理的,那个函数我一直在用的,没问题的。
      

  4.   

    $input="[会员:11021]";//这个是会员输入的,这里为了直观,我先给他值了;
    $content = preg_replace("#\[会员:([0-9]{5,6})\]#e",'get_username("\\1")',$$input);  
      

  5.   


    $id="11021";
    echo intval($id);
    就这两行怎么可能是空,是不是你前面的代码出错了..
      

  6.   

    ereg_replace或者
    eregi_replace都不满足你的需求 ,你应该用preg_replace + e修正符或者preg_replace_callback函数
      

  7.   

    $input="[会员:11021]";//这个是会员输入的,这里为了直观,我先给他值了;
    $content = preg_replace("#\[会员:([0-9]{5,6})\]#e",'get_username("\\1")',$$input);  
    晕,发现你的$input前面还有个$
    应该是
    $input="[会员:11021]";//这个是会员输入的,这里为了直观,我先给他值了;
    $content = preg_replace("#\[会员:([0-9]{5,6})\]#e",'get_username("\\1")',$input); 
      

  8.   

    preg_replace + e 的e就表示eval这个'get_username("\\1")',如果单引号都不加$content = preg_replace("#\[会员:([0-9]{5,6})\]#",get_username("\\1"),$input);function get_username($id){return $id;}那就是先执行get_username("\\1"),获取返回值,\\1这时候是什么串?根本就不是正则的反向引用了,而只是单存的"\\1"串所以会变成$content = preg_replace("#\[会员:([0-9]{5,6})\]#","\\1",$input);$content变成了纯数字,这个和你想要把反向引用传给某个函数进行处理,是不一样的处理。