我在数据表中有类似于</body> 的数值但是</body>无法在页面上显示,如何写一个函数可以调用时直接 select AAA(...查询语句)现在不知道如何写这个函数 替换如: <,>的字符串麻烦写一个函数谢谢!有一个oracle的示例函数,可供参考:CREATE OR REPLACE FUNCTION XSS(v_val IN varchar)
RETURN varchar IS
a_val varchar(4000);
BEGIN
    a_val := v_val;
    IF INSTR(a_val,'&') > 0 THEN
        a_val := REPLACE(a_val,'&','&amp;');
    END IF;
    IF INSTR(a_val,'<') > 0 THEN
        a_val := REPLACE(a_val,'<','&lt;');
    END IF;
    IF INSTR(a_val,'>') > 0 THEN
        a_val := REPLACE(a_val,'>','&gt;');
    END IF;
    IF INSTR(a_val,'"') > 0 THEN
        a_val := REPLACE(a_val,'"','&quot;');
    END IF;
    IF INSTR(a_val,'''') > 0 THEN
        a_val := REPLACE(a_val,'''',''');
    END IF;
    RETURN a_val;
END;

解决方案 »

  1.   

    说下替换规则oracle的看不懂
      

  2.   

    可以這麼改寫Create Function XSS(@v_val varchar(1000))
    Returns varchar(1000)
    As
    Begin
    Select @v_val = Replace(@v_val, '&','&amp;')
    Select @v_val = Replace(@v_val, '<','&lt;')
    Select @v_val = Replace(@v_val, '>','&gt;')
    Select @v_val = Replace(@v_val, '"','&quot;')
    Select @v_val = Replace(@v_val, '''''','''')
    End
      

  3.   

    create function dbo.uf_xss(@v_val varchar(100))
    returns varchar(100)
    as
    begin
    set @v_val=replace(replace(replace(replace(@v_val,'&','&amp;'),'<','&lt;'),'>','&gt;'),'"','&quot;')
    return @v_val
    end
      

  4.   

    少了ReturnCreate Function XSS(@v_val varchar(1000))
    Returns varchar(1000)
    As
    Begin
    Select @v_val = Replace(@v_val, '&','&amp;')
    Select @v_val = Replace(@v_val, '<','&lt;')
    Select @v_val = Replace(@v_val, '>','&gt;')
    Select @v_val = Replace(@v_val, '"','&quot;')
    Select @v_val = Replace(@v_val, '''''','''')
    Return @v_val
    End
      

  5.   

    gahade(与君共勉) ( ) 信誉:100  2007-07-23 17:27:15  得分: 0  
     
     
       最后那个单引号的看不懂
      
     
    ------------
    應該是將兩個單引號替換為一個
      

  6.   

    create function XSS(@v_val varchar(8000))
    RETURNs varchar(8000)
    as
    BEGIN
        IF charindex('&',@v_val) > 0 
            set @v_val := REPLACE(@v_val,'&','&amp;')    IF charindex('<',@v_val) > 0
            set @v_val := REPLACE(@v_val,'<','&lt;')    IF charindex('>',@v_val) > 0
            set @v_val := REPLACE(@v_val,'>','&gt;')    IF charindex('"',@v_val) > 0
            set @v_val := REPLACE(@v_val,'"','&quot;')    IF charindex('''',@v_val) > 0
            set @v_val := REPLACE(@v_val,'''','''''')    RETURN @v_val
    END
    go
      

  7.   

    Haiwer(海阔天空),不用加判斷的,可以直接用Replace替換
      

  8.   

    Haiwer(海阔天空) ( ) 信誉:138  2007-07-23 17:30:57  得分: 0  
     
     
       應該是將一個單引號替換為两個  
     
    -----------------------
     IF INSTR(a_val,'''') > 0 THEN
            a_val := REPLACE(a_val,'''',''');不可能吧,後面總共才3個單引號,怎麼替換為2個?