2011-06-11 5 views
1

마지막 URL에 추가 매개 변수를 추가하기 위해 현재 URL 쿼리 문자열을 조작하는 데 약간의 문제가 있습니다.PHP 쿼리 문자열 조작

예를 들어 당, 제품에 대한 카테고리 레이아웃이 말할 URL은 다음과 같습니다

index.php?category=3&type=5 

지금, 해당 페이지에 나는 테이블이나 그리드 중 하나 인 레이아웃에 대한 링크가 있습니다. 해당 URL에서 나는 현재 가지고 :

<a href="index.php?<?php echo preg_replace($array,'',$_SERVER['QUERY_STRING']); ?>&layout=grid" ... 

을 그리고, 나뿐만 아니라 테이블 href에 대해 동일한 않습니다. 또한 배열에서 나는 단지 :

$array = array ('/&layout=table/', '/&layout=grid/') 

이 방법이 올바른지, 아니면 더 좋은 방법이 있습니까? 나는 preg_replace이 없기 때문에 클릭 할 때마다 동일한 layout 매개 변수를 계속 추가하므로 이전 layout 매개 변수를 제거하지 않고 이전 매개 변수, 다음 매개 변수, 다음 매개 변수, 다음 매개 변수를 표시합니다.

이것에 대한 통찰력은 매우 감사하겠습니다.

편집 :

function buildQuery($key,$value) { 
$params = $_GET; 
$params[$key] = $value; 

return http_build_query($params); 
} 

그리고 유일한 문제 오프 :

<a href="index.php?<?php echo buildQuery('layout','grid'); ?>">grid</a> 

이 무의미 보일 수도 있지만, 내가 갖고 싶은 아래의 답변에 덕분에, 나는 약간의 기능을 만들었습니다 내보기/템플릿 파일을 추가로 설정하지 않고. Im 깨끗한 괴물. 나는 심지어 'index.php?' 그것으로 그냥 게으른 수, 어쨌든 지금은 뭔가 놀 수 :) ..

답변

5

, 단순히 GET 변수를 수정하고 쿼리 문자열을 다시 쉽게

<a href="index.php?<?php echo preg_replace('/(^|&)layout=[^&]*/', '\\1layout=new_layout', $_SERVER['QUERY_STRING']; ?>">...</a> 
+0

저의 http_build_query 함수를 가리켜 주셔서 감사합니다. 존재하지도 못했습니다. 또한 초기 질문을 정리해 주셔서 감사합니다. 꽤 많이 돌진했다.하지만 'preg_replace'가 아니라 'preg_replace'가 아닌 그대로 변경했습니다. 이 기능을 사용하면 신속하고 쉬운 기능을 신속하게 만들어 미래 시나리오를 쉽게 만들 수 있습니다. 내 기능은 내 질문에 편집되었습니다 .. – Edhen

0

직접 URL을 구축하기 위해 $_GET paramaters를 구문 분석에 대해 생각해보십시오.

당신이하고 싶은 것은 index.php로가는 링크가 현재와 같은 모든 매개 변수를 갖지만 레이아웃을 그리드로 변경하는 것입니다.

<?php 
// make a copy of the $_GET array with all the parameters from the query string 
$params = $_GET; 
// set layout=grid regardless of whether layout was set before or its value 
$params['layout'] = 'grid'; 
// generate a query string to append to your urls. 
// Note that &amp; is used as the arg separator; this is necessary for XHTML and advised for HTML 
$queryString = http_build_query($params, '', '&amp;'); 
?> 

href="index.php?<?php echo $queryString; ?>"> 

이 편집하는 것보다 훨씬 용이하고 [ 'QUERY_STRING'] 자신을 $ _SERVER를 수정 : 난 당신 같은 것을 할 게 좋을 것. 당신은 또한 할 수 있지만

<a href="index.php?<?php echo http_build_query($params); ?>">...</a> 

: 다음

$params = $_GET; 
$params['layout'] = 'new_layout'; 

: 쿼리 문자열을 수정하려면

+0

나는 또한 당신에게 당신의 대답에 대한 점수를 주지만, 불행히도 1을 투표 할 의뢰인이 없다. – Edhen

+0

나는 '&'이 없어도 여전히 작동한다는 것을 알았습니다. 그것없이 문제가 될 것인가? – Edhen

+0

@Edhen 그냥'$ queryString = http_build_query ($ params);와 관련된 문제가되지 않습니다. – mjec