Нашел функцию преобразующую заголовки на русском и казахском языках в английские буквы.
function translitURL($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","Х"=>"x","Ц"=>"c","Ч"=>"ch",
"Ш"=>"sh","Щ"=>"shh","Ъ"=>"j","Ы"=>"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","х"=>"x",
"ц"=>"c","ч"=>"ch","ш"=>"sh","щ"=>"shh","ъ"=>"j",
"ы"=>"y","ь"=>"","э"=>"e","ю"=>"yu","я"=>"ya",
" "=> "-", "."=> "", "І"=> "i",
"і"=> "i", "Ң"=> "n", "ң"=> "n",
"Ү"=> "u", "ү"=> "u", "Қ"=> "q",
"қ"=> "q", "Ұ"=> "u",
"ұ"=> "u", "Ғ"=> "g", "ғ"=> "g",
"Ө"=> "o", "ө"=> "o", "Ә"=> "a",
"ә"=> "a"
);
// Убираю тире, дефисы внутри строки
$urlstr = str_replace('–'," ",$str);
$urlstr = str_replace('-'," ",$urlstr);
$urlstr = str_replace('—'," ",$urlstr);
// Убираю лишние пробелы внутри строки
$urlstr=preg_replace('/\s+/',' ',$urlstr);
if (preg_match('/[^A-Za-z0-9_\-]/', $urlstr)) {
$urlstr = strtr($urlstr,$tr);
$urlstr = preg_replace('/[^A-Za-z0-9_\-]/', '', $urlstr);
$urlstr = strtolower($urlstr);
return $urlstr;
} else {
return strtolower($str);
}
}
Не пойму, как лучше ее использовать, на каком этапе?
У меня есть возможность заносить сгенерированный таким образом url в базу данных на этапе добавления новости.
Я слышал, что заносить в базу данных это не нужно.
Как быть, как правильно?
Как далее использовать эту функцию?
Изначально перед итоговым результатом планировал добавлять id новости, пример:
123-novost.html
Никто не мешает использовать оба подхода - помещать в ссылку как ид новости (это в любом случае обязательно, поскольку заголовок может потом измениться, а ид - нет), так и заголовок, чисто для SЕО, если кто в него верит.
При этом транслитерировать заголовок не обязательно, достаточно url-кодирования. Так что в теории никакая функция не нужна. Если же хочется обязательно с транслитерацией, то убрать хотя бы из функции бессмысленный код: вместо того, чтобы преобразовывать каждый символ по 10 раз, мы просто заменяем любое количество недопустимых символов на дефис:
function translitURL($str)
{
$translit = array(
"А"=>"a","Б"=>"b","В"=>"v","Г"=>"g",
"Д"=>"d","Е"=>"e","Ё"=>"yo","Ж"=>"zh","З"=>"z","И"=>"i",
"Й"=>"j","К"=>"k","Л"=>"l","М"=>"m","Н"=>"n",
"О"=>"o","П"=>"p","Р"=>"r","С"=>"s","Т"=>"t",
"У"=>"u","Ф"=>"f","Х"=>"x","Ц"=>"c","Ч"=>"ch",
"Ш"=>"sh","Щ"=>"shh","Ъ"=>"j","Ы"=>"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","х"=>"x",
"ц"=>"c","ч"=>"ch","ш"=>"sh","щ"=>"shh","ъ"=>"j",
"ы"=>"y","ь"=>"","э"=>"e","ю"=>"yu","я"=>"ya",
"І"=> "i","і"=> "i", "Ң"=> "n", "ң"=> "n","Ү"=> "u",
"ү"=> "u", "Қ"=> "q","қ"=> "q", "Ұ"=> "u","ұ"=> "u",
"Ғ"=> "g", "ғ"=> "g","Ө"=> "o", "ө"=> "o", "Ә"=> "a",
"ә"=> "a"
);
$str = strtr($str, $translit);
$str = preg_replace('/[^A-Za-z0-9_-]+/', '-', $str);
$str = strtolower($str);
return $str;
}
Виртуальный выделенный сервер (VDS) становится отличным выбором
Ситуация такая Apple Pay и tinkoff После создания платежной сессии
Подскажите какой можно написать тест PhpUnit на следующий метод(метод парсит ресурс и сохраняет ссылки в csv)
Существует сервис на PHP, от которого я получаю json и выполняю при помощи JsonNet парсинг