php decode javascript escape的函数

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/hjue/article/details/7391898

php的urldecode只能decode javascript的encodeURI,不能decode javascript的escape,下边的函数是万能的

   

function utf8_urldecode($str) {
      if(strpos('+'.$str,'%u')>0)
      {
          $str = preg_replace("/%u([0-9a-f]{3,4})/i","&#x\\1;",urldecode($str));
          return html_entity_decode($str,null,'UTF-8');;          
      }elseif(strpos('+'.$str,'%'))
      {
          return urldecode($str);
      }else
      {
          return $str;
      }

    }


展开阅读全文

javascript中的escape()函数揭密!

10-19

现在编程由于要用到对html网页加密,于是查了n多关于escape()函数资料,但是没有一个能正确说出个方法,只说转换成16进制。但是escape的汉字是unicode编码的,所以硬性的把html的源码转换成16进制,经过unescape()后汉字是乱码。rn delphi提供两个函数 httpencode()和httpdecode(),经过研究,它和escape()和unescape()差别很大。一个是字符集的问题,还有一个是httpencode()转换了许多escape()不转换的字符。比如:'/'等。rn 经过1天的尝试,由于屡试不成功,中间都想放弃了尝试了,但是最后终于找出了一个方法。下面贴出我的源代码,以供大家参考,在遇到这个问题时,就不用费尽精力查资料和尝试了:rnrnFunction TYoungCHDisp.HtmlEncrypt(FilePath:String): Boolean;rnvarrn I: integer;rn Tmp1,Tmp2: TStringList;rn S: String;rnbeginrn Tmp1 := TStringList.Create;rn Tmp2 := TStringList.Create;rn If Not FileExists(FilePath) Then Exit;rn Tmp1.LoadFromFile(FilePath);rn S := '';rn For I := 0 to Tmp1.Count - 1 dorn beginrn S := S + Encode(Tmp1.Strings[I]) + '%0D%0A';rn end;rn S := 'document.write(unescape("' + S + '"));';rn Tmp2.Add(' ');rn Tmp2.SaveToFile(FilePath);rn Tmp1.Free;rn Tmp2.Free;rnend;rnrnFunction TYoungCHDisp.Encode(S: String): String;rnconstrn NoConversion = ['A'..'Z','a'..'z','0'..'9','/'];rnvarrn T: WideString;rn I: Integer;rn H,L: Byte; rnbeginrn Result := '';rn T := WideString(S);rn For I := 1 to Length(T) Dorn beginrn if (Char(T[i]) in NoConversion) and (Ord(T[I]) < 127) Thenrn beginrn Result := Result + T[I];rn Continue;rn end;rn H := Hi(Ord(T[I]));rn L := Lo(Ord(T[I]));rn If Ord(T[I]) > 127 Thenrn Result := Result + '%u' + (IntToHex(H, 2) + IntToHex(L, 2))rn elsern Result:= Result + '%' + IntToHex(L, 2);rn end;rn Result:= copy(Result, 1, Length(Result));rnend; 论坛

javascript中的escape()函数揭密!

10-19

现在编程由于要用到对html网页加密,于是查了n多关于escape()函数资料,但是没有一个能正确说出个方法,只说转换成16进制。但是escape的汉字是unicode编码的,所以硬性的把html的源码转换成16进制,经过unescape()后汉字是乱码。rn delphi提供两个函数 httpencode()和httpdecode(),经过研究,它和escape()和unescape()差别很大。一个是字符集的问题,还有一个是httpencode()转换了许多escape()不转换的字符。比如:'/'等。rn 经过1天的尝试,由于屡试不成功,中间都想放弃了尝试了,但是最后终于找出了一个方法。下面贴出我的源代码,以供大家参考,在遇到这个问题时,就不用费尽精力查资料和尝试了:rnrnFunction TYoungCHDisp.HtmlEncrypt(FilePath:String): Boolean;rnvarrn I: integer;rn Tmp1,Tmp2: TStringList;rn S: String;rnbeginrn Tmp1 := TStringList.Create;rn Tmp2 := TStringList.Create;rn If Not FileExists(FilePath) Then Exit;rn Tmp1.LoadFromFile(FilePath);rn S := '';rn For I := 0 to Tmp1.Count - 1 dorn beginrn S := S + Encode(Tmp1.Strings[I]) + '%0D%0A';rn end;rn S := 'document.write(unescape("' + S + '"));';rn Tmp2.Add(' ');rn Tmp2.SaveToFile(FilePath);rn Tmp1.Free;rn Tmp2.Free;rnend;rnrnFunction TYoungCHDisp.Encode(S: String): String;rnconstrn NoConversion = ['A'..'Z','a'..'z','0'..'9','/'];rnvarrn T: WideString;rn I: Integer;rn H,L: Byte; rnbeginrn Result := '';rn T := WideString(S);rn For I := 1 to Length(T) Dorn beginrn if (Char(T[i]) in NoConversion) and (Ord(T[I]) < 127) Thenrn beginrn Result := Result + T[I];rn Continue;rn end;rn H := Hi(Ord(T[I]));rn L := Lo(Ord(T[I]));rn If Ord(T[I]) > 127 Thenrn Result := Result + '%u' + (IntToHex(H, 2) + IntToHex(L, 2))rn elsern Result:= Result + '%' + IntToHex(L, 2);rn end;rn Result:= copy(Result, 1, Length(Result));rnend;rn 论坛

没有更多推荐了,返回首页