2010-08-18 4 views
3

,이 읽기 때문에 : http://www.digitalbart.com/jquery-and-urlencode/JQuery와, 아약스와 나는 아무것도에 전달 된 URL을에 encodeURI 것을 알고 앰퍼샌드 수수께끼

내가 듣고 있어요 현재 트랙의 현재 시간을 공유하고자합니다. 그래서 우수한 절단기를 설치했습니다. 나는 모든 사람이 내 개인 키를보고 싶어하지 않기 때문에 967

, 나는 약간의 PHP 파일이 = 트랙 = 2 & 시간 : 그리고 함께 모든 비트를두고 코드의 비트, 다음을 수 이는 입력을 받아, 다음을 추가, 그래서 다음과 같습니다 그래서 메인 페이지에, 나는 $("div.shorturl").load(loadall);

의 jQuery를 호출 http://myshorten.example/yourls-api.php?signature=x&action=shorturl&format=simple&url=http://urltoshorten?track=2&time=967

그 다음 않는 CURL의 조금 후 축약 반환 좋은 짧은 URL. 이처럼

:

$myurl='http://myshorten.example/yourls-api.php?signature=x&action=shorturl&format=simple&url=' . $theurl; 
$ch = curl_init($myurl); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
$data = curl_exec($ch); 
curl_close($ch); 
if ($data === false) { 
    echo 'cURL failed'; 
    exit; 
} 
echo $data; 

모두 완벽한.

제외 ... 단축 URL은 항상 http://urltoshorten?track=2 형식입니다. 앰퍼샌드 길이를 줄인 뒤에는 아무 것도 표시되지 않습니다.

나는 php의 URLencode에서 전체 URL을 감싸려고했지만, encodeURI와 encodeURIComponent 둘 다에 트랙 = 2 & time = 967을 래핑했습니다. evem은 하나 또는 둘 다에서 모든 것을 래핑하려고 시도했습니다. 그리고 제출 된 URL이 track = 1 % 26time % 3D5 인 것처럼 보일지라도, &은 여전히 ​​깨져 있습니다.

인코딩되지 않은 URL이있는 "일반"버전을 youurls 인터페이스에 붙여 넣거나 브라우저의 위치 표시 줄에 붙여 넣은 일반 URL로 api를 통해 URL을 제출하면 다시 작동합니다 아주.

URL이 잘못 인코딩 된 것 같지 않습니다. URL이 제대로 인코딩 된 것 같습니다. 내가 생각할 수있는 유일한 것은 아마도 CURL입니다.

지금이 시점에서 "&을 *로 바꾸고 다시 변환하지 않으시겠습니까?"라고 생각할 수도 있습니다. " URL이 확장 될 때 OK, 그래서, 나는 다음은 * 트랙에 위치에 찾는 약간을하고 아무것도의 나머지 부분을 가정

var track = $.getUrlVar('track'); 
var time = $.getUrlVar('time'); 

의 값은 그래서 시간 VAR을 잃을 수도 얻을 *가 시간이 지난 후에도 약간 못 생겼고 요점은 더 이상 일을하는 올바른 방법이 아닙니다.

누구든지 나를 도울 수 있으면 감사하겠습니다.

답변

2

난 당신이 (당신이 내부 URL을 의미 외부 URL의 구성 요소로 전달되는 'URL'로 가정) 무엇을해야 참으로 PHP의를 urlencode

의 전체 URL을 포장 시도 . URL 구성 요소에 값을 입력 할 때마다 설정 값이 URL인지 여부에 관계없이 URL 인코딩해야합니다.

$myurl='http://...?...&url='.rawurlencode($theurl); 

(urlencode()이 같은 쿼리 매개 변수에 대한 OK,하지만 당신은 정말 공간을 필요로하지 않는 [+%20 대, 나는 기본적으로 rawurlencode() 가고 싶어 조금 더 예쁘게 볼 수 있도록 rawurlencode()은 또한 경로 부품 OK입니다 .)

이 당신에게 같은 최종 URL 줄 것이다 : 당신이 작품을 검증 할 수 있어야한다

http://myshorten.example/yourls-api.php?signature=x&action=shorturl&format=simple&url=http%3A%2F%2Furltoshorten%3Ftrack%3D2%26time%3D967 

합니다. 그렇지 않으면 yourls-api.php에 문제가 있습니다. 에 encodeURI와에 encodeURIComponent 모두 내가 PHP의를 urlencode의 전체 URL을 포장 시도, 나는 포장 한 트랙 = 2 & 시간

+0

절대 별! 완벽하게 작동합니다. urlencode와 반대로 rawurlencode에 대해서도 알지 못했습니다. 실제로 그랬습니다. 천재 - 나는 행복한 사람, 많은 감사합니다. – talkingnews

1

= 967, 나는 evem 하나 또는 둘 모두에서 전체를 감싸는 시도했습니다. 그리고 여전히, &은 제출 된 URL이 track = 1 % 26time % 3D5 인 것처럼 보일지라도 그것을 나눕니다.

아마도 HTTP 변수가 작동하는 방법에 대한 설명이 도움이 될 것입니다.

나는 다음과 같은 변수와 값으로 페이지를 받고 있어요 경우 :

var1 = Bruce Oxford 
var2 = Brandy&Wine 
var3 = ➋➌➔   (unicode chars) 

우리는 VAR 이름과 VAR의 가치, 즉 열린 우리당 - 인코딩 :

var1 = Bruce+Oxford 
var2 = Brandy%26Wine 
var3 = %E2%9E%8B%E2%9E%8C%E2%9E%94 

을 우리 구분되지 않은 charecters를 인코딩하는 것이므로 요청 데이터가 위와 같이 표시 될 것입니다 :

?var1=Bruce+Oxford&var2=Brandy%26Wine&var3=%E2%9E%8B%E2%9E%8C%E2%9E%94 

보다는 :

%3Fvar1%3DBruce+Oxford%26var2%3DBrandy%26Wine%26var3%3D%E2%9E%8B%E2%9E%8C%E2%9E%94 

이것은 물론 횡설수설입니다.

관련 문제