php解碼escape
『壹』 求php高手:php 解密JS中的escape的代碼
本例經過我測試沒有問題.
<?
function utf8RawUrlDecode ($source) {
$decodedStr = "";
$pos = 0;
$len = strlen ($source);
while ($pos < $len) {
$charAt = substr ($source, $pos, 1);
if ($charAt == '%') {
$pos++;
$charAt = substr ($source, $pos, 1);
if ($charAt == 'u') {
// we got a unicode character
$pos++;
$unicodeHexVal = substr ($source, $pos, 4);
$unicode = hexdec ($unicodeHexVal);
$entity = "". $unicode . ';';
$decodedStr .= utf8_encode ($entity);
$pos += 4;
}
else {
// we have an escaped ascii character
$hexVal = substr ($source, $pos, 2);
$decodedStr .= chr (hexdec ($hexVal));
$pos += 2;
}
} else {
$decodedStr .= $charAt;
$pos++;
}
}
return $decodedStr;
}
$test = '%u884C%u4E1A%u5206%u6790';//js escape過的'行業分析';
echo utf8RawUrlDecode($test);
?>
『貳』 瀏覽器編碼函數escape(),encodeURI(),encodeURIComponent()的區別
1、escape()
escape()是js編碼函數中最古老的一個。實際上,escape()不能直接用於URL編碼,它的真正作用是返回一個字元的Unicode編碼值。比如「你好」的返回結果是"%u4F60%u597D"。無論網頁的原始編碼是什麼,一旦被javascript編碼,就都變為unicode字元。也就是說,Javascipt函數的輸入和輸出,默認都是Unicode字元。
2、encodeURI()
encodeURI是對整個URL進行編碼,因此除了常見的符號以外,對其他一些在網址中有特殊含義的符號「; / ? : @ & = + $ , #」,也不進行編碼。編碼後,它輸出符號的utf-8形式,並且在每個位元組前加上%,需要注意的是,它不對單引號』編碼。
它對應的解碼函數是decodeURI()。
3、encodeURIComponent()
與encodeURI()的區別是,它用於對URL的組成部分進行個別編碼,而不用於對整個URL進行編碼。因此,「; / ? : @ & = + $ , #」,這些在encodeURI()中不被編碼的符號,在encodeURIComponent()中統統會被編碼,所以encodeURIComponent()相比encodeURI()要更加徹底。至於具體的編碼方法,兩者是一樣。
它對應的解碼函數是decodeURIComponent()。
『叄』 escape(程式語言)詳細資料大全
escape採用ISO Latin字元集對指定的字元串進行編碼。所有的空格符、標點符號、特殊字元以及其他非ASCII字元都將被轉化成%xx格式的字元編碼(xx等於該字元在字元集表裡面的編碼的16進制數字)。
基本介紹
- 中文名 :escape
- 作用 :進行編碼
- 隸屬 :計算機
- 類型 :代碼
加密解密
escape的加密解密 在很多腳本語言的套用當中,escape函式是一個可轉換編碼的函式,比如javascript 的 ajax 中,向a.php傳遞參數?city=北京,可先將"北京"用escape重新編碼,再進行傳遞,在伺服器端接收後再解碼才不會出現亂碼。escape一般用於傳遞URL參數和類似urlencode base64_encode函式是類似的。如上?city=北京VB聲明
Declare Function Escape Lib "gdi32" Alias "Escape" (ByVal hdc As Long, ByVal nEscape As Long, ByVal nCount As Long, ByVal lpInData As String, lpOutData As Any) As Long 說明 一個靈活的設備控制函式 返回值 escape函式 Long,對於QUERYESCSUPPORT,如支持指定的換碼,則返回TRUE(非零);否則返回零。對於PASSTHROUGH,大於零值表示成功;如指定的換碼不支持,則返回零;如果出錯,則返回負值 參數表 參數 類型及說明 hdc Long,設備場景的句柄 nEscape Long,換碼數量,由API32.TXT檔案中的一個常數定義。這決定了具體的運作方式。請參考註解
nCount Long,lpInData緩沖區的大小,用位元組數表示 lpInData String,由換碼類型決定。對於QUERYESCSUPPORT,這代表指向一個整數變數的指針,那個變數包含了要測試的換碼值。對於PASSTHROUGH,這代表指向一個數據塊的指針,那個數據塊包含於要傳送數據的頭16位位元組數量中。數據塊剩餘的部分包含了要傳送給印表機的實際數據緩沖區 lpOutData Any,指定一個輸出緩沖區,它的具體使用由換碼決定。它不由QUERYESCSUPPORT或PASSTHROUGH使用,而且應設為NULL(ByVal 0&) 註解 只有兩個換碼在Win32環境中經常用到。請用QUERYESCSUPPORT換碼判斷一個換碼是否得到了驅動程式的支持。用PASSTHROUGH換碼將原始數據直接發給一台印表機。其他換碼在Win32仍然得到了支持,但目的只是為了與Win16保持兼容 ---------------------------------------------------------------------------------------------------------------------- Escape 鳥山明的一部漫畫作品
『肆』 ajax使用escape後在php後台怎麼解碼
php沒有對應的函數,可以自己寫一個:
/**
*jsescapephp實現
*@param$stringthestingwanttobeescaped
*@param$in_encoding
*@param$out_encoding
*/
functionescape($string,$in_encoding='UTF-8',$out_encoding='UCS-2'){
$return='';
if(function_exists('mb_get_info')){
for($x=0;$x<mb_strlen($string,$in_encoding);$x++){
$str=mb_substr($string,$x,1,$in_encoding);
if(strlen($str)>1){//多位元組字元
$return.='%u'.strtoupper(bin2hex(mb_convert_encoding($str,$out_encoding,$in_encoding)));
}else{
$return.='%'.strtoupper(bin2hex($str));
}
}
}
return$return;
}
functionunescape($str)
{
$ret='';
$len=strlen($str);
for($i=0;$i<$len;$i++)
{
if($str[$i]=='%'&&$str[$i+1]=='u')
{
$val=hexdec(substr($str,$i+2,4));
if($val<0x7f)
$ret.=chr($val);
else
if($val<0x800)
$ret.=chr(0xc0|($val>>6)).
chr(0x80|($val&0x3f));
else
$ret.=chr(0xe0|($val>>12)).
chr(0x80|(($val>>6)&0x3f)).
chr(0x80|($val&0x3f));
$i+=5;
}else
if($str[$i]=='%')
{
$ret.=urldecode(substr($str,$i,3));
$i+=2;
}else
$ret.=$str[$i];
}
return$ret;
}
這是php對應寫法一對,一般不推薦使用js用這兩個函數,推薦使用decodeURI() 和 decodeURIComponent() 來進行url編碼比較好;
『伍』 escape解出來的是unicode編碼嗎
\u4E2D\u56FD或者%u4E2D%u56FD等字元是什麼意思?
這是UNICODE編碼,可以用JS的unescape函數解決,Java直接用System.out.println(); 打出來就可以了
下面具體介紹JS中這兩種函數的使用
1.escape方法
對String對象編碼以便它們能在所有計算機上可讀,
escape(charString)
必選項charstring參數是要編碼的任意String對象或文字。
說明
escape方法返回一個包含了charstring內容的字元串值(Unicode格式)。所有空格、標點、重音符號以及其他非ASCII字元都用%xx編碼代替,其中xx等於表示該字元的十六進制數。例如,空格返回的是"%20 "。
字元值大於 255 的以 %uxxxx 格式存儲。
注意 :escape 方法不能夠用來對統一資源標示碼 (URI) 進行編碼。對其編碼應使用 encodeURI 和 encodeURIComponent 方法。
2.unescape 方法
解碼用escape()方法編碼的string對象
unescape(charstring)
必選項charstring參數是要解碼的String對象。
說明
unescape方法返回一個包含charstring內容的字元串值。所有以%xx十六進制形式編碼的字元都用ASCII字元集中等價的字元代替。
以 %uxxxx 格式(Unicode 字元)編碼的字元用十六進制編碼 xxxx 的 Unicode 字元代替.
『陸』 php中smarty模板的escape轉碼後的超鏈接報403
解決辦法如下:
1、在php代碼中直接使用urlencode處理你的$url,然後assion入smarty模板,輸出結果A後,點擊鏈接A看是否可用,
2、如果上述操作後,鏈接A不可用,就說明是你的瀏覽器(伺服器)不支持直接url安全碼的自動解碼(是會有某些瀏覽器或伺服器的支持度不夠好的)。這時就需要你在php端做urldecode的解碼工作,來恢復到常規的url B,從而打開這個常規url B。
3、如果鏈接A可用,就說明是在smarty中的escape確實是有了問題。那就不要使用這個方法。
4、另外,切記——(href=""),這個引號是必需要的。盡可能避開一些微妙的外在因素的干擾。你可以寫成<a href='{"urlceshi.php?name=leo&pwd=123"|escape:"url"}'
『柒』 php中的escape是什麼意思
escape
採用ISOLatin字元集對指定的字元串進行編碼。所有的空格符、標點符號、特殊字元以及其他非ASCII字元都將被轉化成%xx格式的字元編碼
(xx等於該字元在字元集表裡面的編碼的16進制數字)。
『捌』 php的escape()和unescape()有什麼作用
分別就是加密解密字元串函數。
『玖』 PHP解密Unicode及Escape加密字元串
在json中不支持中文,用它傳送中文數據就會出現數據丟失或者亂碼,必須在傳送前對要發送的字元串進行編碼,由於傳送過去需要用js進行數據解析,考慮
到js中有unescape函數,故若在php中有個escape函數,對數據進行編碼,在客戶端用unescape進行
解碼,這樣就會方便很多。
本文給大家分享一個PHP解密Unicode及Escape加密字元串函數
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
?php
function
uni_decode($s)
{
preg_match_all('/#([0-9]{2,5});/',
$s,
$html_uni);
preg_match_all('/[%]u([0-9a-f]{4})/ie',
$s,
$js_uni);
$source
=
array_merge($html_uni[0],
$js_uni[0]);
$js
=
array();
for($i=0;$icount($js_uni[1]);$i++)
{
$js[]
=
hexdec($js_uni[1][$i]);
}
$utf8
=
array_merge($html_uni[1],
$js);
$code
=
$s;
for($j=0;$jcount($utf8);$j++)
{
$code
=
str_replace($source[$j],
unicode2utf8($utf8[$j]),
$code);
}
return
$code;//$s;//preg_replace('/u([0-9a-f]{4})/ie',
chr(hexdec('1')),
$s);
}
function
unicode2utf8($c)
{
$str=;
if
($c
0x80)
{
$str.=chr($c);
}
else
if
($c
0x800)
{
$str.=chr(0xc0
|
$c6);
$str.=chr(0x80
|
$c
0x3f);
}
else
if
($c
0x10000)
{
$str.=chr(0xe0
|
$c12);
$str.=chr(0x80
|
$c6
0x3f);
$str.=chr(0x80
|
$c
0x3f);
}
else
if
($c
0x200000)
{
$str.=chr(0xf0
|
$c18);
$str.=chr(0x80
|
$c12
0x3f);
$str.=chr(0x80
|
$c6
0x3f);
$str.=chr(0x80
|
$c
0x3f);
}
return
$str;
}
$str='%u5927%u5BB6%u597D%uFF0C我是孤魂!br
/';
echo
uni_decode($str);
//
大家好,我是孤魂!這是測試文本!
在網上搜索一把,很多用php實現的escape函數,大同小異
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function
phpescape($str){
preg_match_all(/[x80-xff].|[x01-x7f]+/,$str,$newstr);
$ar
=
$newstr[0];
foreach($ar
as
$k=$v){
if(ord($ar[$k])=127){
$tmpString=bin2hex(iconv(GBK,ucs-2,$v));
if
(!eregi(WIN,PHP_OS)){
$tmpString
=
substr($tmpString,2,2).substr($tmpString,0,2);
}
$reString.=%u.$tmpString;
}
else
{
$reString.=
rawurlencode($v);
}
}
return
$reString;
}
以上所述就是本文的全部內容了,希望大家能夠喜歡。
『拾』 php smarty 「 | 」 ,這個豎杠表示什麼
「|」 是變數修飾符與前面變數的間隔符號;
變數修飾符 escape(escape可用於將變數編碼或轉換成 html, url, 單引號, 十六進制, 十六進制實體, javascript 和 電郵地址。 默認是:html) ,在你的上面的截圖中escape的意思是:讓$bb中的字元串以html實體的格式輸出,
3. 示例:
如果$bb 這個變數是
'Hello'
那麼,它使用了修飾符 escape後的輸出將會是:
'Hello'
4. 資料頁面:
www.smarty.net/docs/zh_CN/language.modifier.escape.tpl
祝愉快!