Bağlantı açılıyor ama aranan metin değişiyor
Yapay zekâdan C++ konusundaki notlarınız için bir arama bağlantısı hazırlamasını istediniz. Bağlantının ana makinesi doğru, sayfa da açılıyor. Fakat arama kutusunda C ve iki boşluk görünüyor. Sorun hedef sitenin yanlış olması değildir; bağlantının sorgu bölümüne eklenen artı işaretleri veri yerine kodlama sözdizimi olarak okunmuştur. Bağlantı denetiminde hedef adres kadar o adrese taşınan alan değerlerini de karşılaştırın.
Bu yazıdaki hedef https://notes.example/search yalnız açıklama için kullanılır; gerçek bir siteye istek yapılmaz. İki ham alanımız q=C++ ve konu=A&B olsun. Amaç, alıcı bu sorguyu form kodlama kurallarıyla okuduğunda aynı iki alanı elde etmesidir. Sayfa içeriği, arama kalitesi ve yetkilendirme bu küçük örneğin kapsamı dışındadır. Burada sınanan şey metnin alan sınırlarıyla birlikte korunmasıdır.
Artı ve ampersand hangi katmanda okunuyor?
WHATWG URL standardının form sorgusu ayrıştırması, artı işaretini boşluğa çevirir; yüzde kodlarını da çözer. Alanlar ampersand ile ayrılır. URLSearchParams bu biçimde alanları serileştirmek ve yeniden okumak için tanımlıdır. Ham bir alanın içindeki artı veya ampersandın veri olarak kalması için uygun kodlama gerekir. Bu davranışı bütün URL parçalarına genellemeyin; yol ve form sorgusu aynı kurallarla işlenmek zorunda değildir.Kaynak: WHATWG — URL Standard
| Alan | Ham değer | Sorgudaki değer |
|---|---|---|
| q | C++ | C%2B%2B |
| konu | A&B | A%26B |
| not | iki kelime | iki+kelime |
Tablodaki son satırda artı, boşluğu temsil eder. İlk satırdaki gerçek artılar ise %2B olarak taşınır. Bu ayrım görüntüde benzer işaretlerden oluşsa da alıcıya farklı metinler verir. Alan değerini okunabilir yapmak için kodlanmış artıları tekrar ham artıya çevirmek, oluşturduğunuz doğru bağlantıyı yeniden bozabilir. İnsanların okuyacağı açıklama metni ile makinenin ayrıştıracağı sorgu dizisini ayrı tutun.
Alanları bir nesneden oluşturun
const params = new URLSearchParams({q: "C++", konu: "A&B"});
const encoded = params.toString();
// q=C%2B%2B&konu=A%26B
const readBack = new URLSearchParams(encoded);
// readBack.get("q") === "C++"
// readBack.get("konu") === "A&B"Bu yöntem alan değerlerini tek tek hazır kodlayıp sonra birbirine yapıştırmanızı gerektirmez. Ham değerleri serileştiriciye verirsiniz; serileştirici veri ile ayraçları ayırır. Sonrasında aynı ayrıştırma sözleşmesiyle geri okuyup kaynak alanlarla tam eşitliği kontrol edebilirsiniz. Böyle bir geri okuma, yalnız bağlantı metninde doğru sözcüğün geçtiğine bakmaktan daha güçlü bir denetimdir; alanın gerçekten nasıl yorumlanacağını gösterir.
| Sorgu | q sonucu | konu sonucu | Ek sorun |
|---|---|---|---|
| q=C++&konu=A&B | C ve iki boşluk | A | B adlı boş alan oluşur |
| q=C%2B%2B&konu=A%26B | C++ | A&B | İki ham değer korunur |
İlk sorguda B’nin kaybolması yalnız harf kaybı değildir. B ayrı bir parametre adı haline gelmiştir; dolayısıyla alıcının gördüğü alan kümesi de değişir. Teslim kontrolünde hem değerleri hem alan adlarını karşılaştırın. İki alan beklenen yerde üç alan bulunması açık bir uyuşmazlıktır. Sessizce fazla alanı silmek yerine ham sorgunun nasıl üretildiğini düzeltmek gerekir.
Önceden kodlanan değeri tekrar kodlamayın
Başka bir AI önerisi, C++ değerini önce C%2B%2B yapıp bunu URLSearchParams içine koyabilir. Bu kez yüzde işaretleri de veri sayılarak %25 biçiminde kodlanır. Çıkan değer C%252B%252B olur. Alıcı bir tur çözdüğünde C++ yerine C%2B%2B metnini görür. Bu durumu çözmek için alıcıya gelişigüzel iki kez çöz talimatı vermeyin; hangi katmanın kodlamadan sorumlu olduğunu belirleyin.
new URLSearchParams({q: "C%2B%2B"}).toString()
→ q=C%252B%252B
Bir tur geri okuma → C%2B%2B
Bu değer özgün C++ metnine eşit değildir.Ham metnin kendisi gerçekten C%2B%2B ise ikinci örnek doğru taşıma olabilir. “İçinde yüzde var, mutlaka önceden kodlanmış” diye karar vermek de yanlıştır. Bu nedenle kaynak alanının ham mı kodlanmış mı olduğu veri sözleşmesinde bulunmalıdır. Aynı metin dizisi farklı katmanlarda farklı rol oynayabilir; modelin görünüşe bakarak kodlama düzeyi tahmin etmesini kabul etmeyin.
Geri okuma kanıtı isteyen istem
Hedef https://notes.example/search; ağ isteği yapma. Ham alanlar q=C++ ve konu=A&B. URLSearchParams ile tek kodlama katmanı kullan. Oluşan sorguyu yeniden ayrıştır; alan adlarını ve tam değerleri kaynakla karşılaştır. q=C++&konu=A&B kusurlu metnini ve önceden kodlanmış q değerinin ikinci kez kodlanmasını ayrıca göster. Fazla alan üretme, ham artıları boşlukla eşitleme. Çıktı: sorgu, geri okunan iki alan ve tam eşitlik kararı.
Gerçek bir bağlantıyı açmadan önce bu kontrol yerel olarak yapılabilir. Ancak alıcı uygulamanın aynı ayrıştırma sözleşmesini kullandığını da bilmeniz gerekir. Uygulama kendi özel sorgu dilini bekliyorsa URL katmanının içinde ikinci bir dil daha olabilir. Önce taşıma katmanında değeri koruyun; sonra taşınan değerin uygulama tarafından nasıl yorumlandığını ayrı inceleyin. URL’nin doğru kodlanması arama ifadesinin mantıksal olarak doğru olduğunu tek başına göstermez.
- Ham alan adları ve değerleri korunmuş mu?
- Alan sayısı beklenen sayıya eşit mi?
- Bir tur geri okuma kaynakla tam eşleşiyor mu?
- Önceden kodlanmış metin veri diye yeniden geçirilmiş mi?
Yüzde işareti ve gerçek boşluğu birlikte deneyin
Yeni ham alan q=A+B C% olsun. Form sorgusunu üretin; gerçek artı, boşluk ve yüzde işareti için hangi dizilerin gerektiğini yazın. Sonra aynı metni geri okuyarak karakter sırasının korunduğunu doğrulayın. q=A+B+C%25 gibi bir elle yazılmış öneride ilk artının neden kaybolacağını açıklayın. Bu denemede gerçek site veya kişisel arama geçmişi kullanılmaz.
Doğru sorgu q=A%2BB+C%25. Geri okuma A+B C% olur. Elle yazılan q=A+B+C%25, A B C% olarak çözülür; gerçek ilk artı boşluğa dönüşür. Kodlanmış metnin görsel benzerliği yeterli kontrol değildir.
Bağlantıyı teslim ederken okunabilir alan özetini ve geri okuma sonucunu eklemek küçük ama yararlı bir alışkanlıktır. Böylece AI’ın oluşturduğu bağlantının yalnız doğru yere gittiğini değil, doğru soruyu da taşıdığını kontrol edebilirsiniz.
Kaynaklar ve doğrulama
- WHATWG — URL Standard
URLSearchParams ile form sorgusu serileştirme; artı, boşluk ve yüzde kodlama ayrımı.
Erişim ve kontrol:
Üretken Yapay Zekâ ile İş Verimliliği
Üretken Yapay Zekâ ile İş Verimliliği programında bağlantı ve veri dönüşümlerini geri okuma kontrolleriyle sınayabilirsiniz.
- Bireysel tarih henüz açıklanmadı