URLÔÇÖyi JavaScriptÔÇÖte kodla?


Al─▒nan cevaba git


Bir URL'yi, bir GET dizisine yerle┼čtirilebilecek ┼čekilde JavaScript kullanarak nas─▒l g├╝venle kodlars─▒n─▒z?

 var myUrl = "http://example.com/index.html?param=1&anotherParam=2";
var myOtherUrl = "http://example.com/index.html?url=" + myUrl;
 

myUrl ─░kinci sat─▒rdaki de─či┼čkeni kodlaman─▒z gerekti─čini varsay─▒yorum ?


2371









Cevap say─▒s─▒n─▒ say: 15






Yerle┼čik i┼člevi encodeURIComponent (str) ve encodeURI (str) i┼člevini inceleyin .
Senin durumunda, bu ├žal─▒┼čmas─▒ gerekir:

 var myOtherUrl = 
       "http://example.com/index.html?url=" + encodeURIComponent(myUrl);
 

2702







├ť├ž se├žene─činiz var:

  • escape() kodlamayacak: @*/+

  • encodeURI() kodlamayacak: [email protected]#$&*()=:/,;?+'

  • encodeURIComponent() kodlamayacak: ~!*()'

Bir ge├žirmek istiyorsan─▒z Ama senin durumunda, URL'yi bir i├žine GET di─čer sayfan─▒n parametre, kullanmak gerekir escape ya da encodeURIComponent de─čil encodeURI .

Y─▒─č─▒n Ta┼čmas─▒ sorusuna bak─▒n En iyi uygulama: ka├ž─▒┼č veya daha fazla tart─▒┼čma i├žin encodeURI / encodeURIComponent .


1481


2008-12-02





─░le sopa encodeURIComponent() . ─░┼člev encodeURI() , URLÔÇÖlerde anlamsal ├Âneme sahip bir├žok karakteri kodlamak i├žin zahmete girmez (├Ârne─čin, "#", "?" Ve "&"). escape() kullan─▒mdan kald─▒r─▒lm─▒┼čt─▒r ve sunucuda kodlanm─▒┼č bo┼čluklar olarak yorumlanacak "+" karakterlerini kodlamak i├žin can atmaz (ve burada di─čerleri taraf─▒ndan belirtildi─či gibi ASCII olmayan karakterleri URL kodlu olarak d├╝zg├╝n bir ┼čekilde kodlamaz).

Ba┼čka yerler aras─▒ndaki encodeURI() ve aras─▒ndaki fark─▒n encodeURIComponent() g├╝zel bir a├ž─▒klamas─▒ var . Bir ┼čeyi URI'nin bir bile┼čeni olarak (├Ârne─čin bir sorgu dizesi parametresi olarak) g├╝venle dahil edilebilecek ┼čekilde kodlamak istiyorsan─▒z, kullanmak istiyorsunuz encodeURIComponent() .


175







En iyi yan─▒t kullanmakt─▒r encodeURIComponent ├╝zerinde de─čerler sorgu dizesi (ve ba┼čka hi├žbir yerde) i├žinde.

Ancak, pek ├žok API'nin "" ile "" yerine ge├žmek istedi─čini anl─▒yorum, bu y├╝zden a┼ča─č─▒dakileri kullanmak zorunda kald─▒m:

 const value = encodeURIComponent(value).replace('%20','+');
const url = 'http://example.com?lang=en&key=' + value
 

escape farkl─▒ taray─▒c─▒larda farkl─▒ ┼čekilde uygulan─▒r ve encodeURI bir├žok karakteri kodlamaz (# ve hatta / gibi) - tam bir URI / URLÔÇÖde kesilmeden kullan─▒l─▒r;

@Jochem a┼ča─č─▒da i┼čaret etti─či gibi, sen kullanmak isteyebilirsiniz encodeURIComponent() (her) klas├Âr ad─▒n─▒, ama nedeni ne olursa olsun bu API'ler istemek gibi g├Âr├╝nm├╝yor + d├╝z eski b├Âylece klas├Âr adlar─▒nda encodeURIComponent i┼čleri b├╝y├╝kt├╝r.

├ľrnek:

 const escapedValue = encodeURIComponent(value).replace('%20','+');
const escapedFolder = encodeURIComponent('My Folder'); // no replace
const url = `http://example.com/${escapedFolder}/?myKey=${escapedValue}`;
 

80







JQuery kullan─▒yorsan─▒z $.param y├Ântemi i├žin giderdim . URL, nesne e┼čleme alanlar─▒n─▒ de─čerlerle kodlar; bu, her de─čerde bir escape y├Ântemi ├ža─č─▒rmaktan daha kolay okunur.

 $.param({a:"1=2", b:"Test 1"}) // gets a=1%3D2&b=Test+1
 

40







Bir URL'yi daha ├Ânce belirtildi─či gibi kodlamak i├žin iki i┼čleviniz vard─▒r:

 encodeURI()
 

ve

 encodeURIComponent()
 

Her ikisinin de var olmas─▒n─▒n nedeni, URLÔÇÖyi ├žok fazla ┼čey b─▒rakmadan b─▒rakma riskiyle korurken, ikincisi gereken her ┼čeyi kodlar.

─░lkiyle, yeni ├ž─▒kar─▒lan URL'yi adres ├žubu─čuna (├Ârne─čin) kopyalayabilirsiniz ve i┼če yarayabilir. Bununla birlikte, ├ž─▒k─▒┼č─▒n─▒z i┼čaretlenmemi┼č alan alan s─▒n─▒rlay─▒c─▒lar─▒na m├╝dahale eder, '=' alan adlar─▒na ve de─čerlerine m├╝dahale eder ve '+' bo┼čluklar─▒ gibi g├Âr├╝n├╝r. Ancak ka├žt─▒─č─▒n─▒z ┼čeyin URL'sini korumak istedi─činizde basit veriler i├žin bu i┼če yarar.

─░kincisi, dizenizdeki hi├žbir ┼čeyin bir URL'yi engellememesini sa─člamak i├žin yapman─▒z gereken her ┼čeydir. Farkl─▒ ├Ânemsiz karakterleri ├ž─▒kmazdan b─▒rakarak URL'nin m├╝dahale etmeden m├╝mk├╝n oldu─ču kadar okunakl─▒ kalmas─▒n─▒ sa─člar. Bu ┼čekilde kodlanm─▒┼č bir URL, art─▒k hi├žbir ┼čey yap─▒lmadan URL olarak ├žal─▒┼čmaz.

Yani zaman alabilirseniz, her zaman encodeURIComponent () i┼člevini kullanmak istersiniz - ad / de─čer ├žiftlerine eklemeden ├Ânce, sorgu i┼člevine eklemeden ├Ânce bu i┼člevi kullanan hem ad─▒ hem de de─čeri kodlay─▒n.

EncodeURI () kullanmak i├žin nedenlerle zor bir zaman ge├žiriyorum () - Bunu daha ak─▒ll─▒ insanlara b─▒rakaca─č─▒m.


10







encodeURIComponent () gitmek i├žin yoludur.

 var myOtherUrl = "http://example.com/index.html?url=" + encodeURIComponent(myUrl);
 

AMA php s├╝r├╝m├╝nden k├╝├ž├╝k farkl─▒l─▒klar oldu─čunu urlencode() ve @ CMS'den bahsedildi─či gibi, her bir karakteri kodlamayaca─č─▒n─▒ akl─▒n─▒zda bulundurmal─▒s─▒n─▒z . Http://phpjs.org/functions/urlencode/ adresindeki ├žocuklar js ile e┼čde─čerde phpencode() :

 function urlencode(str) {
  str = (str + '').toString();

  // Tilde should be allowed unescaped in future versions of PHP (as reflected below), but if you want to reflect current
  // PHP behavior, you would need to add ".replace(/~/g, '%7E');" to the following.
  return encodeURIComponent(str)
    .replace('!', '%21')
    .replace('\'', '%27')
    .replace('(', '%28')
    .replace(')', '%29')
    .replace('*', '%2A')
    .replace('%20', '+');
}
 

9







Normal javascript ile denedi─čim benzer bir ┼čey

 function fixedEncodeURIComponent(str){
     return encodeURIComponent(str).replace(/[!'()]/g, escape).replace(/\*/g, "%2A");
}
 

5







├çift kodlamay─▒ ├Ânlemek i├žin, kodlamadan ├Ânce URL'nin kodunu ├ž├Âzmek iyi bir fikirdir (├Ârne─čin, daha ├Ânce kodlanm─▒┼č olabilecek kullan─▒c─▒ taraf─▒ndan girilen URL'ler ile u─čra┼č─▒yorsan─▒z).

Diyelim ki abc%20xyz 123 girdi olarak elimizde var (bir bo┼čluk zaten kodlanm─▒┼č):

 encodeURI("abc%20xyz 123")            //   wrong: "abc%2520xyz%20123"
encodeURI(decodeURI("abc%20xyz 123")) // correct: "abc%20xyz%20123"
 

4


2017-01-05





Hi├žbir ┼čey benim i├žin ├žal─▒┼čt─▒. G├Ârd├╝─č├╝m tek ┼čey giri┼č sayfas─▒n─▒n HTML koduydu, m├╝┼čteri koduna 200 kodu ile geri d├Ând├╝m. (─░lk ├Ânce 302 fakat ayn─▒ Ajax iste─či giri┼č yapmak yerine ba┼čka bir Ajax iste─či i├žinde giri┼č sayfas─▒ y├╝klemek yerine y├Ânlendirme olmas─▒ gerekiyordu. giri┼č sayfas─▒n─▒n metni).

Giri┼č denetleyicisinde bu sat─▒r─▒ ekledim:

 Response.Headers["land"] = "login";
 

Ve k├╝resel Ajax i┼čleyicisinde, bunu yapt─▒m:

 $(function () {
    var $document = $(document);
    $document.ajaxSuccess(function (e, response, request) {
        var land = response.getResponseHeader('land');
        var redrUrl = '/login?ReturnUrl=' + encodeURIComponent(window.location);
        if(land) {
            if (land.toString() === 'login') {
                window.location = redrUrl;
            }
        }
    });
});
 

┼×imdi hi├žbir sorunum yok ve cazibe gibi ├žal─▒┼č─▒yor.


3







URL kodlamas─▒ nedir:

URL i├žinde ├Âzel karakterler bulundu─čunda, bir URL kodlanmal─▒d─▒r. ├ľrne─čin:

 console.log(encodeURIComponent('?notEncoded=&+')); 

Bu ├Ârnekte, dize d─▒┼č─▒ndaki t├╝m karakterlerin notEncoded % i┼čaretleriyle kodlanm─▒┼č oldu─čunu g├Âzlemleyebiliriz . URL kodlamas─▒, % ├Âzelli─čiyle t├╝m ├Âzel karakterlerden ka├žt─▒─č─▒ i├žin y├╝zde kodlamas─▒ olarak da bilinir . Sonra bu% i┼čaretinden sonra her ├Âzel karakterin kendine has bir kodu vard─▒r.

URL kodlamas─▒na neden ihtiyac─▒m─▒z var:

Baz─▒ karakterlerin, bir URL dizesinde ├Âzel bir de─čeri vard─▒r. ├ľrne─čin,? karakter bir sorgu dizesinin ba┼člang─▒c─▒n─▒ g├Âsterir. Bir kayna─č─▒ a─č ├╝zerinde ba┼čar─▒l─▒ bir ┼čekilde bulmak i├žin, bir karakterin bir dizgenin par├žas─▒ veya url yap─▒s─▒n─▒n bir par├žas─▒ olarak ne zaman ifade edildi─čini birbirinden ay─▒rmak gerekir.

JSÔÇÖde URL kodlamas─▒n─▒ nas─▒l elde edebiliriz:

JS, URL'leri kolayca kodlamak i├žin kullanabilece─čimiz bir y─▒─č─▒n olu┼čturma yard─▒mc─▒ program─▒ i┼člevi sunar. Bunlar iki uygun se├ženek:

  1. encodeURIComponent() : Bir URI'nin bir bile┼čenini arg├╝man olarak al─▒r ve kodlanm─▒┼č URI dizesini d├Ând├╝r├╝r.
  2. encodeURI() : Bir URI'yi arg├╝man olarak al─▒r ve kodlanm─▒┼č URI dizesini d├Ând├╝r├╝r.

├ľrnek ve uyar─▒lar:

URLÔÇÖnin tamam─▒n─▒n (┼čema dahil, ├Ârne─čin https: //) i├žine girmedi─činin fark─▒nda olun encodeURIComponent() . Bu asl─▒nda i┼člevsel olmayan bir URL'ye d├Ân├╝┼čt├╝rebilir. ├ľrne─čin:

 // for a whole URI don't use encodeURIComponent it will transform
// the / characters and the URL won't fucntion properly
console.log(encodeURIComponent("http://www.random.com/specials&char.html"));

// instead use encodeURI for whole URL's
console.log(encodeURI("http://www.random.com/specials&char.html")); 

T├╝m URL'yi encodeURIComponent foward e─čik ├žizgilerinin (/) ├Âzel karakterlere d├Ân├╝┼čt├╝r├╝ld├╝─č├╝n├╝ de belirledi─čimizi g├Âzlemleyebiliriz . Bu, URL'nin art─▒k d├╝zg├╝n ├žal─▒┼čmamas─▒na neden olur.

Bu nedenle (ad─▒ndan da anla┼č─▒laca─č─▒ gibi) kullan─▒n:

  1. encodeURIComponent kodlamak istedi─činiz bir URLÔÇÖnin belirli bir b├Âl├╝m├╝nde
  2. encodeURI kodlamak istedi─činiz URLÔÇÖnin tamam─▒nda.

3







URL dizesini kodla

    var url = $ (konum) .attr ('href'); // mevcut url'yi al
    //VEYA
    var url = 'klas├Âr / index.html? param = # 23dd & noob = evet'; // veya bir tane belirtin

var encodedUrl = encodeURIComponent(url); console.log(encodedUrl); //outputs folder%2Findex.html%3Fparam%3D%2323dd%26noob%3Dyes for more info go http://www.sitepoint.com/jquery-decode-url-string


2







─░┼čte olan CANLI DEMO aras─▒nda encodeURIComponent() ve decodeURIComponent() fonksiyonlar─▒ in┼ča JS:

 <!DOCTYPE html>
<html>
  <head>
    <style>
      textarea{
        width:30%;
        height:100px;
      }
    </style>
    <script>
      // encode string to base64
      function encode()
      {
        var txt = document.getElementById("txt1").value;
        var result = btoa(txt);
        document.getElementById("txt2").value = result;
      }
      // decode base64 back to original string
      function decode()
      {
        var txt = document.getElementById("txt3").value;
        var result = atob(txt);
        document.getElementById("txt4").value = result;
      }
    </script>
  </head>
  <body>
    <div>
      <textarea id="txt1">Some text to decode
      </textarea>
    </div>
    <div>
      <input type="button" id="btnencode" value="Encode" onClick="encode()"/>
    </div>
    <div>
      <textarea id="txt2">
      </textarea>
    </div>
    <br/>
    <div>
      <textarea id="txt3">U29tZSB0ZXh0IHRvIGRlY29kZQ==
      </textarea>
    </div>
    <div>
      <input type="button" id="btndecode" value="Decode" onClick="decode()"/>
    </div>
    <div>
      <textarea id="txt4">
      </textarea>
    </div>
  </body>
</html>
 

1







A┼ča─č─▒daki i┼člevi kullanarak esapi k├╝t├╝phanesini kullanabilir ve url'nizi kodlayabilirsiniz. ─░┼člev, metin i├žeri─činin geri kalan─▒ kodlan─▒rken '/' nin kodlamada kaybolmamas─▒n─▒ sa─člar:

 function encodeUrl(url)
{
    String arr[] = url.split("/");
    String encodedUrl = "";
    for(int i = 0; i<arr.length; i++)
    {
        encodedUrl = encodedUrl + ESAPI.encoder().encodeForHTML(ESAPI.encoder().encodeForURL(arr[i]));
        if(i<arr.length-1) encodedUrl = encodedUrl + "/";
    }
    return url;
}
 

https://www.owasp.org/index.php/ESAPI_JavaScript_Readme


1







RFC 3986'ya fixedEncodeURIComponent kesinlikle uymak i├žin i┼člevi kullan─▒n :https://tools.ietf.org/html/rfc3986

 function fixedEncodeURIComponent(str) {
  return encodeURIComponent(str).replace(/[!'()*]/g, function(c) {
    return '%' + c.charCodeAt(0).toString(16);
  });
}
 

1



─░lgili yay─▒nlar


Taray─▒c─▒n─▒n JavaScriptÔÇÖte URLÔÇÖye gitmesini sa─člama [yinelenen]

Bir URLÔÇÖnin ana bilgisayar ad─▒ k─▒sm─▒ JavaScriptÔÇÖte nas─▒l ├ž─▒kar─▒l─▒r?

JavaScriptÔÇÖte resim verisi url'sini al

JavaScript'te g├Âreceli bir URL'ye y├Ânlendiriliyor

URl, Node.js'de bir ┼čeyi nas─▒l kodlar─▒m?

Python'da URL parametrelerinin y├╝zdesi nas─▒l kodlan─▒r?

├ľnceki URLÔÇÖyi JavaScriptÔÇÖte nas─▒l alabilirim?

JSONÔÇÖu URLÔÇÖden JavaScriptÔÇÖte almak

JavaScriptÔÇÖte URLÔÇÖye gitmek i├žin bir t─▒klama i┼člevi ekleme

JavaScriptÔÇÖte bir URLÔÇÖyi ayr─▒┼čt─▒rma

Etiketle ilgili di─čer sorular [javascript]


─░nstanceof'─▒ ├ža─č─▒rmadan ├Ânce bo┼č kontrol gerekli midir?

Node.js (package.json) i├žin ÔÇťdevDependenciesÔÇŁ NPM mod├╝llerinin kurulmas─▒n─▒ nas─▒l ├Ânlersiniz?

Bullet renkleri UL / LI html listelerinde herhangi bir g├Âr├╝nt├╝ veya yay─▒lma etiketi kullanmadan CSS yoluyla nas─▒l ayarlan─▒r [├žo─čalt─▒l─▒r]

Hangi durumlarda malloc ve / veya yeni kullan─▒yorum?

Bir AES ┼čifreleme modu nas─▒l se├žilir (CBC ECB CTR OCB CFB)?

Xcode 9 ÔÇťiPhone me┼čgul: iPhone i├žin hata ay─▒klay─▒c─▒ deste─čini haz─▒rlamaÔÇŁ

─░ste─če ba─čl─▒ de─či┼čkenleri bildirmek i├žin 'var' kullan─▒yor mu? [├žift]

C# ile "using" kullan─▒mlar─▒ nelerdir

Mac OS X ve ├žoklu Java s├╝r├╝mleri

PyPy - CPython'u nas─▒l yenebilir?