Mysql sorgu eşleştirmek için bir URL ünvanına sahip

2 Cevap php

I have SQL rows with this information: Example - Exampleish (Exampleishbosh)

hepsi değil de) (var, bu yüzden şerit için iyi bir fikir olurdu

- and ()

url dışarı ve sonra sadece SQL sorgusunda kalan kelimelerle bir arama yapmak?

http://www.co.com/example_exampleish_exampleishbosh/

ya da bu kötü bir fikir mi?

2 Cevap

Soru bana biraz belirsiz olduğundan, bilgi dize (bir makale için bir başlık gibi) ek bilgi için bir anahtar-sort-of-şey olarak hareket ettiğini varsayarak yaşıyorum ve hiçbir gerçek GET arama gereksinim vardır.

Bu durumda, veritabanı yapısını değiştirmek için izin veriliyorsa, ben başlık thingy olarak kullanılarak, (sayısal tanımlayıcı gibi) surrogate key yerine çeşit kullanmak bir slug) .

Bu durumda, web sitenizin içinde üreten bağlantıları, hedef için id ve sülük hem de olsun, ve http://example.com/[id]/[slug]/, örneğin http://example.com/213/omg-lol-the-cat-jumped/ biçiminde bunun bir url oluşturmak.

Lütfen sunucu isteği işlerken, sen id ("213") sadece ilgilenen ve sülük ("omg-lol--cat-atladı") gizlice-göz vermek için sadece insan kullanıcılar içindir başlık ve arama sonucunu etkilemez. Sen kimliği değil, sülük eşleşen sayfasını sağlar. Bu şekilde, arama (hiçbir SQL LIKE-eşleştirme) verimli ve daha az hata eğilimli (malformatted salyangozlar gelen SQL enjeksiyonu).

Bir mermi içine bir dize dönüştürmek için nasıl (mümkün?) Sorusuna gelince, bu pek çok yaklaşım vardır. Ben sadece tüm alfanümerik olmayan karakterleri kaldırmak ve tire veya alt çizgi ile alfanümerik parçalarını birleştirmek istiyorsunuz. Muhtemelen 20-ish karakter dize uzunluğunu kesmek istiyorum.

: Ben bu yüzden burada ASCII dizeleri "slugify" için kullanmanız gereken fonksiyon ise doğru, bir sülük gibi işlevlere arıyorsanız anlamak

function Slugify($string)
{
    return strtolower(trim(preg_replace('~-+~', '-', preg_replace('~[^0-9a-z]~i', '-', $string)), '-'));
}

Slugify('Example - Exampleish (Exampleishbosh)'); // example-exampleish-exampleishbosh

Siz veritabanında sülük depolamak ve resquested URL ile eşleşmesi gerekir.

EDIT: Bu fonksiyon biraz daha basitleştirilmiş olabilir:

function Slugify($string)
{
    return strtolower(trim(preg_replace(array('~[^0-9a-z]~i', '~-+~'), '-', $string), '-'));
}