ホームページ >バックエンド開発 >PHPチュートリアル >PHP モック URL 書き換え
$_SERVER['PATH_INFO'] の方が便利 $_SERVER['PATH_INFO'] に関する情報を確認し、シミュレートされた URL Rewrite を再修正しました。
目的は同じですが、クラスを使用する代わりに、取得した情報を $_GET および $_SERVER["QUERY_STRING"] の定義済み変数に直接書き込みます。昨日と同様に、$_SERVER["R_QUERY_STRING" "] を追加して、シミュレートされたクエリ文字列。
URL の / 記号に解決策を追加し、違いを示すために中括弧を自動的に追加し、$_GET を使用して値を取得して Rewrite を生成するテストはすべて正常です。
コードの内容は次のとおりです:
function BuildRewriteURL ( $string , $UrlStyle = 0 ) {
if ( strpos ( $string , ' ? ' )) {
$StrArray =explode ( ' ? ' , $string ) ;
$Page = $StrArray [0] ;
$ParaString = $StrArray [1] ;
}
else $ParaString = $string ;
$ParaString = str_replace (' ? ' , '' , $ParaString ) ;
if ( ! strpos ( $ParaString , ' & ' )) return $this ->パラストリング ;
$URLArray =explode('&', $ParaString ) ;
for ( $i = 0 ; $i $Para =explode ( ' = ' , $URLArray [ $i ]) ;
if ( ! empty ( $Para [ 1 ])) {
if ( ! empty ( $UrlString )) $UrlString .= ' / ' ;
if ( strpos ( $Para [ 0 ] , ' / ' )) $Para [ 0 ] = ' { ' 。 $Para[0] . ' } ' ;
if ( strpos ( $Para [ 1 ] , ' / ' )) $Para [ 1 ] = ' { ' 。 $Para[1] . ' } ' ;
$UrlString .= $Para [ 0 ] 。 ' / ' 。 $Para[1];
}
}
switch ( $UrlStyle ) {
case 1 : $AddString = ' / ' ;壊す ;
ケース 2 : $AddString = '' ;壊す ;
デフォルト: $AddString = ' .html ' ;壊す ;
}
return str_replace (' // ' , ' / ' , $Page . ' / ' . $UrlString . $AddString ) ;
}
$QueryString = !空 ( $_SERVER [ ' PATH_INFO ' ]) ? $_SERVER [ ' PATH_INFO ' ] : str_replace ( $_SERVER [ " SCRIPT_NAME " ] , '' , $_SERVER [ " REQUEST_URI " ]) ;
$QueryString = str_replace (array (' " ' , " ' " , ' < ' , ' > ' ) , array ( ' %22 ' , ' %27 ' , ' %3C ' , ' %3E ' ) , $QueryString ) ;
if ( strrpos ( $QueryString , " & " ) && strrpos ( $QueryString , " & " )) { //URL が初期状態のとき
$ParaArray =explode ( ' & ' , $_SERVER [ " QUERY_STRING " ]) ;
for ( $i = 0 ; $i if ( strpos ( $ParaArray [ $i ] , ' = ' ) + 1 != strlen ( $ParaArray [ $i ])) {
$Para =explode ( ' = ' , $ParaArray [ $i ]) ;
if ( ! empty ( $Para [ 1 ])) {
if ( strpos ( $Para [ 0 ] , ' / ' )) $Para [ 0 ] = ' { ' . $Para [ 0 ] ' ;
if ( strpos ( $Para [ 1 ] , ' / ' )) $Para [ 1 ] = ' { ' . ' } ' $RequestURL .= ' / ' . $Para [ 1 ] ;
}
}
$_SERVER [ " R_QUERY_STRING " ] = $RequestURL ;
}
elseif ( strrpos ( $QueryString , " / " )) { //当URLが模拟 URL書き換え時
$QueryString = str_replace ( ' .html ' , '' , $QueryString ) ;
$_SERVER [ "R_QUERY_STRING " ] = $QueryString ;
preg_match_all ( " /{(.*)}/U " , $QueryString , $matches ) ;
for ( $i = 0 ; $i $QueryString = str_replace($matches[0][$i], rawrlencode($matches[1][$i]), $QueryString);
}
$ParaArray =explode('/', $QueryString);
for ( $i = 0 ; $i if ( ! empty ( $ParaArray [ $i + 1 ])) {
if ( ! empty ( $RequestURL )) $RequestURL .= ' & ' ;
if ( strpos ( $ForArray [ $i + 1 ] , ' %2F ' )) $ 配列 [ $ i + 1 ] = rawurldecode ( $ 配列 [ $ i + 1 ]) ;
if ( strpos ( $ForArray [ $i + 2 ] , ' %2F ' )) $ 配列 [ $ i + 2 ] = rawurldecode ( $ 配列 [ $ i + 2 ]) ;
$StrArray[$ForArray[$i+1]] = $ForArray[$i+2];
$RequestURL .= $ForArray [ $i + " = $ForArray[$i+2]; $_GET = $StrArray ;
$_SERVER['QUERY_STRING'] = $RequestURL;
}
unset($QueryString, $ParaArray, $Para, $StrArray, $RequestURL, $matches, $i);
エコー '
?????????????????????-
$_SERVER["REQUEST_URI"] = /test.php/a/123/b/ 456 /d/789/{u/rl}/{http:/www.163.com/} .com/
??????? ?????????????-
$_GET['a'] = 123
$_GET[ 'b'] = 456
$_GET['c'] =
$_GET['d' ] = 789
$_GET['u/rl'] = http://www.test.php?a=123&b= 456&c=&d=789&u/rl=http://www.163.com/') = /test.php/a/123/b/456/d/789/{u/rl }/{http://www .163.com/}.html
BuildRewriteURL('/?a=123&b=456&c=&d=789&u/rl=http://www.163.com/', '1') = /a/123/b/ 456/d/789/{u/rl}/{http:/www.163.com/}/
BuildRewriteURL('a=123&b=456&c=&d=789&u/rl=http:/ /www.163.com/ ', '2') = /a/123/b/456/d/789/{u/rl}/{http:/www.163.com/} 例:http://localhost:808/test。 php?a=123&b=456&c=&d=789&u/rl=http://www
?????????????????????-
$_SERVER["REQUEST_URI"] = /dcep2/test.php?a=123&b=456&c=&d=789&u/rl = http://www.163.com/
$_SERVER["QUERY_STRING"] = a=123&b=456&c=&d=789&u/rl=http://www.163.com/
$_SERVER["R_QUERY_STRING"] = /a/123/b/456/d/789/{u/rl}/{http://www.163.com/}
???????????????? ? ??-
$_GET['a'] = 123
$_GET['b'] = 456
$_GET['c'] =
$_GET['d'] = 789
$_GET['u/ rl '] = http://www.163.com/
???????????????????-
BuildRewriteURL('/test.php?a=123&b= 456&c= &d=789&u/rl=http://www.163.com/') = /test.php/a/123/b/456/d/789/{u/rl}/{http:/www. 163.com/}.html
BuildRewriteURL('/?a=123&b=456&c=&d=789&u/rl=http://www.163.com/', '1') = /a/123/b/456 /d /789/{u/rl}/{http:/www.163.com/}/
BuildRewriteURL('a=123&b=456&c=&d=789&u/rl=http://www.163.com/' , ' 2') = /a/123/b/456/d/789/{u/rl}/{http:/www.163.com/}
これで完了です。明日もテストと修正を続けます。皆さんのコメントは大歓迎です。