>백엔드 개발 >PHP 튜토리얼 >http_build_query 함수로 인한 문제

http_build_query 함수로 인한 문제

WBOY
WBOY원래의
2016-07-29 09:01:061838검색

http_build_query는 URL 요청 문자열을 생성하는 함수입니다. 그런데 오늘 회사 커뮤니티를 로컬로 설치하다가 로그인이 안되는 현상이 조금 있었습니다. 그런데 테스트 서버는 정상이었습니다. 카펫 문제 해결 및 문제가 있는 코드 찾기(데모 전용, 민감한 콘텐츠는 차단됨):
[coolcode lang="php"]
$Args = array(
"usr" => "touchboy",
"pwd" => "123456",
"ip" => "127.0.0.1",
"src" => "계정"
);
$query= http_build_query( $Args );

[/coolcode]
테스트 서버에서 얻은 결과는 다음과 같습니다.
usr=touchboy&pwd=123456&ip=127.0.0.1&src=account
내 로컬 결과는 다음과 같습니다.
usr=touchboy &pwd=123456 &ip=127.0.0.1 &src=account
중간 커넥터에 차이가 있습니다. 서버는 일반 "&"이지만 내 로컬 서버는 이스케이프된 "&"입니다. 이는 궁극적으로 데이터 제출 시 로컬 오류로 이어집니다.
PHP 매뉴얼을 보면 http_build_query 섹션에 이 문제가 언급되어 있지 않으므로 마음에 드는 유일한 해결 방법은 htmlspecialchars_decode($query)를 사용하여 복원하는 것입니다. 그런데 늘 의구심이 드는 것은 왜 머신이 두 개나 있는 걸까? 처음에는 리눅스(서버)와 윈도우(로컬 머신)의 차이인가 의심했는데, 다른 윈도우 머신에서 테스트해보니 결과가 나왔다. 그런 다음 환경 구성에 문제가 있다고 의심했습니다. Google을 검색한 후 문제의 원인은 php.ini 구성의 한 줄입니다.
[coolcode lang=" php"]arg_separator.output = "&"[/coolcode]
arg_separator.output을 "&"로 정의하고 아파치를 재시작합니다. 문제 해결!
그런데 PHP 매뉴얼의 문제점에 대해 말씀드리자면, 제가 사용한 매뉴얼은 고전적인 "PHP5 중국어 매뉴얼 문서판"(2006-11-05에 편집됨)이기 때문에 내용은 PHP 5.1.0 단계에 머물러야 합니다. 그런 다음 Chen Hao(Haohappy)의 "PHP 중국어 매뉴얼"(2009-02-15에 컴파일됨)을 다운로드하고 http_build_query 섹션을 살펴본 후 관련 프롬프트 줄을 찾았습니다.
[coolcode lang=”php”]
참고: 매개변수를 구분하려면 arg_separator.output을 사용하세요. [/coolcode]
공식 매뉴얼에 가서 최신 매뉴얼을 확인해보면, 이 문제를 해결하기 위해 버전 5.1.2에서 $arg_separator 매개변수가 추가되었다는 자세한 설명이 있는 것 같습니다. 중국어 매뉴얼은 아직도 심각하게 뒤떨어져 있고, 5.1.2는 1년 전에 출시됐고, 2009-02-15에 편찬된 최신 중국어 매뉴얼에는 아직 관련 내용이 포함되어 있지 않습니다.
요컨대, 최고의 솔루션은 PHP 기능 오류 발생 시 시간을 절약하세요.
1. 가능한 한 빨리 PHP 공식 웹사이트로 이동하여 답변을 찾으세요.
2. 보유하고 있는 PHP 매뉴얼이 최신인지 확인하세요.

위에서는 http_build_query 함수로 인해 발생하는 문제를 그 측면을 포함하여 소개했습니다. PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.

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