Урок за Visual Basic WebRequest HTTP Post

Използвам функцията PHP urlencode (), за да избегна символите за котва тагове (). Защо не мога да използвам функцията на пълен URL адрес като

http://www.allposters.com/gallery.asp?startat=/getthumb.asp&txtSearch= ... 

Функцията преобразува този низ в

http%3A%2F%2Fwww.allposters.com%2Fgallery.asp%3Fstartat%3D%2Fgetthumb.asp%26txtSearch 

което не работи при щракване върху ...

Опитвам се да избягам само от QUERY

startat%3D%2Fgetthumb.asp%26txtSearch 

прекъсва връзката също.

Така че въпросът ми е кои символи да избягам, използвайки функцията urlencode ()?

Благодаря,

Джоел

URLEncode е предназначен за кодиране на символи, които имат специални значения в URL адресите (като двоеточие, въпросителни знаци, наклонени черти и т.н.).

Трябва да прилагате URLEncode само към стойностите, които искате да кодирате във вашия URL, а не към целия URL адрес.

Напр. Да предположим, че имам следния URL:

http://example.com/search.php?query=VALUE 

В сегашния си вид не е необходимо бягство. Но да предположим, че VALUE всъщност беше

/. the book 

Битът VALUE сега съдържа знак, който не е безопасен, тъй като наклонената черта има специално значение в URL.

Така че, преди да прикача СТОЙНОСТТА към URL адреса, трябва да URLEncode само СТОЙНОСТТА.

http://example.com/search.php?query=%2F.%20the%20book 

Когато уеб сървър получи горепосочената заявка, той ще трябва да URLDecode на параметъра на заявката, за да получи обратно оригиналния текст.

В цитирания във въпроса пример се кодира целият низ на заявката. Това е неправилно, тъй като специалните символи (като амперсанди между параметрите на заявката) след това се избягват и не се интерпретират правилно. Трябва да кодирате само стойностите на параметрите.

  • Така че като правило, трябва да избягвам само параметрите (дори ако те не съдържат специални символи, все още ли е добре?)
  • @Joel Да, ако не съдържа специални знаци, нищо няма да се случи и ако съдържа специални знаци, е абсолютно необходимо.
  • Както разбирам, стойностите, които не са параметри, трябва да бъдат кодирани от обект, когато се поставят в котва. Така че, в този случай амперсандът, който се използва за обединяване на параметрите на низа на заявката, ще трябва да бъде кодиран от обект като &.
  • Но ако URL адресът е получен програмно от уеб страница и не е кодиран? Трябва да разделите URL адреса на части и да ги кодирате поотделно? Например URL адресът, споменат в този въпрос stackoverflow.com/questions/44841468/..., или има интелигентна функция в PHP, която върши работата?
  • Няма интелигентна функция. Все още трябва сами да знаете кои части трябва да бъдат кодирани и кои не, съгласно RFC 3986 😕 (напр. Ако не знаете априори имената на параметрите, трябва да ги кодирате и вие) [@ see: stackoverflow.com/questions/51292397/…]

е работил за вас: Charles Robertson | Искате ли да се свържете с нас?