Bir URL nasıl rel = kanonik değerini belirtme bir teklif içeriyor? Varsa

5 Cevap php

Lütfen URL yolu olduğunu söylüyorlar:

/thisisa"quote/helloworld/

Sonra nasıl rel=canonical URL oluşturabilirim?

Bu doğru mu?

<link rel="canonical" href="/thisisa&amp;quot;/helloworld/" />

UPDATE

Ben bir form gönderme alıyorum, açıklığa kavuşturmak için, ben URL içine sorgu dizesi parçası dönüştürmek gerekir. Yani adımlar şunlardır:

  1. .htaccess yönlendirme yapar
  2. PHP bir sorgu dizesi olarak bir dizin işler.
  3. The query string will be dynamically inserted into the:
    • Başlık,
    • Açıklama
    • Anahtar Kelimeler
    • Canonical URL.
    • Formun giriş kutusuna geri tükürmek

Yani ilk kesim üzerinde ... her adım yapılması gereken hangi işleme bilmeniz gerekir, bu benim almaktır:

  • Başlık: htmlspecialchars($rawQuery)
  • Açıklama: htmlspecialchars($rawQery)
  • Anahtar Kelimeler: htmlspecialchars($rawQuery)
  • Canonical URL: Bu zor bir parçasıdır. Bu aynı URL eşleşmelidir .htaccess yönlendirir ama öyle olsa bile, ben tırnak JavaScript enjeksiyon neden olabilir, çünkü ham sorgu güvensiz olduğunu düşünüyorum. urlencode($rawquery) endişeleniyorsunuz bu adresten geliyor bu yana, zaten URL-kodlanmış olmaz?
  • Forma geri tükürmek: htmlspecialchars($rawQuery)

5 Cevap

Sen ikiye sorunuzu bölmek zorunda:

Do I need to encode the double quotation mark character in the URL path?

Evet, tırnak işareti karakteri (U 0022) düz izin verilmez ve %22 ile kodlanmış olmalıdır.

Do I need to encode the double quotation mark character in a HTML attribute value?

Bu bağlıdır how you declare the attribute value:

Varsayılan olarak, SGML tüm değerleri çift tırnak (ASCII ondalık 34) veya tek tırnak işareti (ASCII ondalık 39) kullanılarak ayrılmış olması nitelik gerektirir. Değeri çift tırnak işaretleri, ve tersi ile sınırlandırılmış zaman tek tırnak işaretleri öznitelik değeri içinde dahil edilebilir. Yazarlar aynı zamanda çift tırnak (&#34;) ve tek tırnak (&#39;) temsil etmek için sayısal karakter başvuruları kullanabilirsiniz. Çift tırnak yazarlar da karakter öğesi gönderimi &quot; kullanabiliriz.

  • Eğer (öznitelik değer beyan etmek çift tırnak işareti karakteri kullanıyorsanız attr = " value " ), then you must encode the douvke quoteation mark character inside the attribute value declaration with a character reference (&quot;, &#34; ya da &#x22;).
  • Eğer öznitelik değeri beyanı için tek tırnak işareti karakteri (U 0027) kullanıyorsanız (attr = ' { [(4)]} ' ), daha sonra tırnak işareti karakteri kodlamak gerekmez. Ama bunu yapmak için önerilir.

Eğer öznitelik değeri çizgi ve bir çift tırnak işareti beri Ve, (tüm hiçbir tırnak kullanarak) üçüncü durum geçerli değildir:

Bazı durumlarda, yazarlar herhangi bir tırnak işaretleri olmadan bir niteliğin değerini belirtebilirsiniz. Öznitelik değeri sadece harfler (az ve AZ), rakamlar (0-9), tire (ASCII ondalık 45), nokta (ASCII ondalık 46), alt çizgi (ASCII ondalık 95), ve iki nokta üst üste (ASCII ondalık 58) içerebilir. Bunları ortadan kaldırmak mümkün olsa bile biz tırnak işaretleri kullanmanızı öneririz.

Now bringing both answers together

Çift tırnak işareti bir URL kodlanmış olması gerektiğinden (but the single quotation mark is!), size yol kesimleri veya URL yolu ile bunu yapmak için aşağıdakileri kullanabilirsiniz:

$path = '/thisisa"quote/helloworld/';
$path = implode('/', array_map('rawurlencode', explode('/', $path)));

Eğer bir HTML niteliğine bu URL yolu koymak istiyorsanız, özel HTML karakterleri kalan kodlamak için htmlspecialchars işlevini kullanın:

echo '<link rel="canonical" href="' . htmlspecialchars($path) . '" />';

Bu durumda, URL kaçan kullanarak% 22

http://everything2.com/title/URL+escape+sequences

Bir alıntı bile geçerli bir URL bir karakter değil, bu yüzden uzun vadeli Eğer bu adres gerektiğini düşünüyorum. Özellikle RFC 2396 tarafından URI sözdizimi çıkarılmıştır.

Olsa acil sorunu çözmek için, kullandığınız, kaçış karakteri gerekir %22.

URL bir çift tırnak içeriyorsa tek tırnak ile içerir.

<link rel="canonical" href='foo.com/thisisa"/helloworld/' />

URI dizeleri HTML kodlaması kullanmayın. Bir işlev özel bir karakter olduğu ampersanı URI'lerde kodlanmış olmalıdır gibi bu geçersiz sözdizimi. Bunun yerine her zaman adresleri için yüzde kodlamasını kullanabilirsiniz.

Sana %22 bir teklif için HEX değerini kullanmak istediğiniz söyleyebilirim.

URL Encoding hakkında daha fazla bilgi edinmek için bu okuyun.