encodeURIComponent gerçekten yararlıdır?

2 Cevap php

Sunucusuna bir http-get isteği yaparken ben hala anlamıyorum şeydir what the advantage is in using JS function encodeURIcomponent to encode each component of the http-get.

Doing some tests I saw the server (using PHP) gets the values of the http-get request properly also if I don't use encodeURIcomponent! Obviously I still need to encode at client level the special character & ? = / : otherwise an http-get value like this "peace&love=virtue" would be considered as new key value pair of the http-get request instead of a one single value. But why does encodeURIcompenent encodes also many other characters like 'è' for example which is translated into %C3%A8 that must be decoded on a PHP server using the utf8_decode function.

EncodeURIComponent kullanarak http-get istek tüm değerleri PHP bunları alırken nedenle ben quite annoying her $ _GET değerin üzerinde her utf8_decode işlevini çağırmak zorunda kodlanmış utf8 vardır.

Why can't we just encode only the & ? = / : characters?

see also: JS encodeURIComponent result different from the one created by FORM It shows that encodeURIComponent does not even encode properly because a simple browser FORM GET encodes characters like '€', in different way. So I still wonder what does this encodeURIComponent is for?

2 Cevap

Bu bir karakter kodlama konudur (again). Gaby belirtildiği gibi, URI (aralığı 0-127 böylece sadece bayt) ASCII karakter dizisi vardır. Yani ASCII olmayan başka bir karakter, Percent-Encoding ile kodlanmış edilmesi gerekmektedir.

UTF-8 yeni "evrensel karakter kodlama" olduğu ve günümüzde kullanıcı arayüzlerinin URI UTF-8 olarak kodlanmış yorumlamak. Ancak bu UTF-8 kodlanmış kelimeler URI'larını ASCII dışında başka bir karakter içeremez beri kendileri de Yüzde-kodlama ile kodlanmış.

Eğer http://en.wikipedia.org/wiki/€ tarayıcınızın adres alanına, tarayıcı (0xE282AC) için UTF-8 kodu bakar ve üzerinde Yüzde-Encoding ({[uygulanır girdiğiniz zaman demektir ki, (2)]}). Bu yüzden http://en.wikipedia.org/wiki/€ aslında http://en.wikipedia.org/wiki/%E2%82%AC neden olur.

Sadece adres alanına http://en.wikipedia.org/wiki/%E2%82%AC girin ve tarayıcı muhtemelen içine dönecek, bunun doğru olduğunu göstermek için http://en.wikipedia.org/wiki/€. Günümüzde kullanıcı arayüzleri URI UTF-8 olarak kodlanmış olması yorumlamak olmasıdır.

Şimdi geri ilk soruya, neden açıkça Yüzde-Encoding geçerli olmalıdır: Eğer Euro işaretini Wikipedia makalesine bağlamak istediğiniz bir web sayfası var düşünün. Sadece bir ova ile URI'yi yazarsak :

<a href="http://en.wikipedia.org/wiki/€">Euro sign</a>

Tarayıcınız karakter için belgenin karakter kodlamasını kullanır. Belgenizin kodlama, Windows-1252 ise bu demektir, (your other question gibi), 0x80 ve URI http://en.wikipedia.org/wiki/%80 (bu olurdu olarak kodlanmış Vikipedi, Windows-1252 0x80 bir yazdırılabilir karakteri ile en popüler karakter kodlaması gibi akıllı) tahmin olduğunu, çünkü aslında çalışır.

Ama belgenin kodlama temsil ISO 8859-15, 0xa4 olarak kodlanmış ise currency sign ¤ in ISO 8859-1 (Wikipedia will chose ISO 8859-1 because 0xA4 is an invalid byte sequence in UTF-8 and HTTP specifies ISO 8859-1 as default character encoding).

Yani tavsiye always use the Percent-Encoding to avoid mistakes. Kullanıcı arayüzlerinin ne demek tahmin izin vermeyin.

Bunun nedeni

A Uniform Resource Identifier (URI) is defined in [RFC3986] as a sequence of characters chosen from a limited subset of the repertoire of US-ASCII [ASCII] characters.

Yani resmen unicode desteklenmiyor; see the RFC ayrıntılar için. Tüm modern tarayıcılarda olsa onu destekleyecek ve size sonuçları sadece iyi olsun neden olduğunu .. ama garip durum için nerede bazı tarayıcı ya da bunu kodlamak bunu desteklemek ve emin tüm standart uyumlu tarayıcılarda çalışıyor yapmaz sistemi ..