>  기사  >  백엔드 개발  >  프로젝트를 Linux로 변경한 후 $_GET[] 입력 매개변수가 기본적으로 urlencode됩니까? ? ?

프로젝트를 Linux로 변경한 후 $_GET[] 입력 매개변수가 기본적으로 urlencode됩니까? ? ?

WBOY
WBOY원래의
2016-12-01 00:25:421324검색

그런데

서버: Win2003 + IIS가 문제없이 정상적으로 실행됩니다
로컬: Win10 + apache 및 Win10 + nginx가 문제없이 정상적으로 실행됩니다

지금

이 프로젝트는 최근 Alibaba Cloud CentOS7.2 및 nginx1.10.2를 대체하는 데 문제가 발생했습니다.

구체적인 질문(프로젝트는 ThinkPHP3.2.3으로 작성되었습니다.)

검색을 위한 페이지에 Form 폼이 있고, 검색을 위한 데이터 가져오기 버튼을 클릭하시면 아래와 같은 URL이 생성됩니다

<code>/index.php/User/index.html?key=刘</code>

컨트롤러에서 I('key')($_GET['key']와 유사한 입력 변수를 얻는 TP 캡슐화 방법)를 사용하여 이 키워드를 얻은 다음 페이지 번호 링크 생성을 쿼리하고 페이지 매김합니다. 다음 URL로

<code>/index.php/User/index/key/刘/p/2.html</code>

위의 페이지 번호 링크를 클릭하여 페이지를 넘길 때:

  • 로컬에서 키를 얻든 원래 서버에서 키를 얻든 상관없이 문자열 "Liu"입니다

  • 그런데 새 서버에서는 획득한 키워드가 "%e5%88%98" 문자열입니다.

이런 종류의 검색을 사용하는 모든 원래 프로그램이 유효하지 않게 되어 페이지를 넘길 수 없게 되었습니다.

내가 시도한 솔루션

  • 나('key')는 get 데이터를 받으면 urldecode를 하는데, 다시 하면 한 페이지만 넘길 수 있다는 것을 알게 되었는데, 다시 하면 key가 다시 urlencode되어 무한정 늘어나게 됩니다. urlencode를 몇 번 돌려도 디코딩됩니다

  • URL 패턴을 수정할 수 없어서 이 방법을 포기했습니다

왜요?

Win+IIS Win+nginx는 문제가 없습니다. linux+nginx를 사용할 때 이런 문제가 발생하는 이유는 무엇입니까? 제 잘못입니까, Linux입니까, 아니면 nginx입니까?

프로젝트가 정상화되길 간절히 바라고 있습니다. 도와주세요

답글 내용:

그런데

서버: Win2003 + IIS가 문제없이 정상적으로 실행됩니다
로컬: Win10 + apache 및 Win10 + nginx가 문제없이 정상적으로 실행됩니다

지금

이 프로젝트는 최근 Alibaba Cloud CentOS7.2 및 nginx1.10.2를 대체하는 데 문제가 발생했습니다.

구체적인 질문(프로젝트는 ThinkPHP3.2.3으로 작성되었습니다.)

검색을 위한 페이지에 Form 폼이 있고, 검색을 위한 데이터 가져오기 버튼을 클릭하시면 아래와 같은 URL이 생성됩니다

<code>/index.php/User/index.html?key=刘</code>

컨트롤러에서 I('key')($_GET['key']와 유사한 입력 변수를 얻는 TP 캡슐화 방법)를 사용하여 이 키워드를 얻은 다음 페이지 번호 링크 생성을 쿼리하고 페이지 매김합니다. 다음 URL로

<code>/index.php/User/index/key/刘/p/2.html</code>

위의 페이지 번호 링크를 클릭하여 페이지를 넘길 때:

  • 로컬에서 키를 얻든 원래 서버에서 키를 얻든 상관없이 문자열 "Liu"입니다

  • 그런데 새 서버에서는 획득한 키워드가 "%e5%88%98" 문자열입니다.

이런 종류의 검색을 사용하는 모든 원래 프로그램이 유효하지 않게 되어 페이지를 넘길 수 없게 되었습니다.

내가 시도한 솔루션

  • 나('key')는 get 데이터를 받으면 urldecode를 하는데, 다시 하면 한 페이지만 넘길 수 있다는 것을 알게 되었는데, 다시 하면 key가 다시 urlencode되어 무한정 늘어나게 됩니다. urlencode를 몇 번 돌려도 디코딩됩니다

  • URL 패턴을 수정할 수 없어서 이 방법을 포기했습니다

왜요?

Win+IIS Win+nginx는 문제가 없습니다. linux+nginx를 사용할 때 이런 문제가 발생하는 이유는 무엇입니까? 저, Linux 또는 nginx의 잘못인가요? 조언 부탁드립니다.

프로젝트가 정상화되길 간절히 바라고 있습니다. 도와주세요

TP 페이징 소스코드에서 URL 생성 시 urlencode 연산을 수행합니다

<code>private function url($page){
        return str_replace(urlencode('[PAGE]'), $page, $this->url);
    }</code>

해결책: 페이징 클래스를 인스턴스화할 때 검색 매개변수를 세 번째 매개변수로 전달할 수 있습니다. 자세한 내용은 페이지 클래스의 구성 방법을 참조하세요

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.