Параметри с имена

stoqnski

Registered
Здравейте , преди го правих така:

Имам новина с id 5 примерно в БД-то .
И съответно във view_news.php?id=5 имам:
$id =$_GET ['id'];
и в query-то имам WHERE id = $id

та ако искам да е view_news.php?title="Потресаващо наводнение..."
имам вече $title=$_GET['title']
и в query-то имам WHERE title=$title ли ?

Въпроси: Да си гарантирам уникалност на заглавието е лесно , но как да го направя валидно в смисъл какъв алгоритъм ползвате ? На мен ми хрумва , в add_news.php примерно да имам полето $title=$_POST['imeto']; и да го минавам през филтри и после конвертирам към латиница(символи) и да го записвам в ново поле в бд-то , за да мога един път да го ползвам в url-то филтрирано на латиница , а после и в самата страница при изкарването. Мога ли направо с кирилица да работя ?
 
PHP:
function getSlug($text)
{ 
  $text = preg_replace('~[^\\pL\d]+~u', '-', $text);
  $text = trim($text, '-');
  $text = iconv('utf-8', 'us-ascii//TRANSLIT', $text);
  $text = strtolower($text);
  $text = preg_replace('~[^-\w]+~', '', $text);
  if (empty($text))
  {
    return 'n-a';
  }
  return $text;
}

Нещо такова ли трябва да ползвам?
Искам от "Потресаващо наводнение.." да става "potresavashto-navodnenie" или гледам също и примери с масиви и елементите са буквите
 
Опитваш се да направиш конвертер от кирилица на латиница и обратно. Но това са буквите. Какво правиш с препинателните знаци? Запетайки, тирета, точки, удивителни и т.н. по-добре хич да ги няма в url-то. Вероятно всички букви ще са малки, за да се чете по-лесно (в урл-то). Например това:
Това е едно заглавие, което е наистина готино!!!
Ще го преобразуваш в това:
/tova-e-edno-zaglavie-koeto-e-naistina-gotino
Дотук добре. Но как ще го върнеш обратно? Няма откъде да знаеш къде има запетайки и удивителни и по колко. Може да минаваш през всеки запис, да го минаваш през "компресията" и да сравняваш... твърде бавно!
Затова:
Може да създадеш допълнително поле, което да ти държи подходящо име за url-адреса. Например shortTitle, то ще бъде unique. В него ще записваш краткия вариант и ще търсиш по него, вместо по title.
[sql]select * from table where shortTitle=$_GET['title'][/sql]

Разбира се, може да забраниш всякакви не-буквено-цифрени знаци в заглавията и тогава няма да имаш горния проблем, но това решение е твърде безсмислено... :?:
 
Проблема с обратната идентификация може да стане както вече е казано с допълнително уникално поле, в което ще се записва генерирания стринг за адреса, но може да стане и чрез трансформация. Идеята е следната - когато се генерира адреса към статията (/tova-e-edno-zaglavie-koeto-e-naistina-gotino ), да се довави отпред и id-то на записа - например /8463-tova-e-edno-zaglavie-koeto-e-naistina-gotino. В тоя случай намирането на записа в базата се свежда до просто парсване на стринга до число - (int), intval() ще свършат работа.
Самото генериране на стринг-а за адрес може да стане с упростен регулярен израз, който да замести всички бели пространства с тирета и да премахне всички препинателни знаци, както и еднобуквените думи в изречението, взето за модел (тайтъла). Добре е да бъде на български, ако съдържанието е на български език, понеже транслетирано до латиница всичко СЕО-то се обезсмисля напълно, ако индексираните думи са неразбераеми.
 
Чакай сега на теб ти бяга логиката.
Тоя слуг ще го генерираш при добавяне на новината от заглавието в ново поле за него.
Пример:
Код:
Пресни картофи за 2 лева
да стане:
Код:
/presni-kartofi-za-2-leva
После търсиш:
PHP:
SELECT * FROM table WHERE slug="$_GET['slug']"
 
uphero каза:
Чакай сега на теб ти бяга логиката.
Тоя слуг ще го генерираш при добавяне на новината от заглавието в ново поле за него.
Пример:
Код:
Пресни картофи за 2 лева
да стане:
Код:
/presni-kartofi-za-2-leva
После търсиш:
PHP:
SELECT * FROM table WHERE slug="$_GET['slug']"

Да , точно това имах предвид и се чудя как да го направя за кирилица възможно най-филтрирано
 
stoqnski каза:
uphero каза:
Чакай сега на теб ти бяга логиката.
Тоя слуг ще го генерираш при добавяне на новината от заглавието в ново поле за него.
Пример:
Код:
Пресни картофи за 2 лева
да стане:
Код:
/presni-kartofi-za-2-leva
После търсиш:
PHP:
SELECT * FROM table WHERE slug="$_GET['slug']"

Да , точно това имах предвид и се чудя как да го направя за кирилица възможно най-филтрирано
PHP:
function ru2lat($str)
{
    $tr = array(
    "А"=>"a", "Б"=>"b", "В"=>"v", "Г"=>"g", "Д"=>"d",
    "Е"=>"e", "Ё"=>"yo", "Ж"=>"zh", "З"=>"z", "И"=>"i", 
    "Й"=>"j", "К"=>"k", "Л"=>"l", "М"=>"m", "Н"=>"n", 
    "О"=>"o", "П"=>"p", "Р"=>"r", "С"=>"s", "Т"=>"t", 
    "У"=>"u", "Ф"=>"f", "Х"=>"kh", "Ц"=>"ts", "Ч"=>"ch", 
    "Ш"=>"sh", "Щ"=>"sch", "Ъ"=>"", "Ы"=>"y", "Ь"=>"", 
    "Э"=>"e", "Ю"=>"yu", "Я"=>"ya", "а"=>"a", "б"=>"b", 
    "в"=>"v", "г"=>"g", "д"=>"d", "е"=>"e", "ё"=>"yo", 
    "ж"=>"zh", "з"=>"z", "и"=>"i", "й"=>"j", "к"=>"k", 
    "л"=>"l", "м"=>"m", "н"=>"n", "о"=>"o", "п"=>"p", 
    "р"=>"r", "с"=>"s", "т"=>"t", "у"=>"u", "ф"=>"f", 
    "х"=>"kh", "ц"=>"ts", "ч"=>"ch", "ш"=>"sh", "щ"=>"sch", 
    "ъ"=>"", "ы"=>"y", "ь"=>"", "э"=>"e", "ю"=>"yu", 
    "я"=>"ya", " "=>"-", "."=>"", ","=>"", "/"=>"-",  
    ":"=>"", ";"=>"","—"=>"","+"=>"", "–"=>"-"
    );
return strtr($str,$tr);
}[code][/code]
 
uphero каза:
Нали решихме да е на кирилица??
lamerko каза:
Добре е да бъде на български, ако съдържанието е на български език, понеже транслетирано до латиница всичко СЕО-то се обезсмисля напълно, ако индексираните думи са неразбераеми.
Вместо /presni-kartofi-za-2-leva да е /пресни-картофи-за-два-лева
Защо да е на латиница?
 

Back
Горе