Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Модификация URLов и поиск в MySQL

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
AndyGrew
Отправлено: 13 Декабря, 2010 - 13:17:32
Post Id


Новичок


Покинул форум
Сообщений всего: 4
Дата рег-ции: Дек. 2010  


Помог: 0 раз(а)




Делаю англоязычный сайт с текстами песен.
Есть 3 таблицы:
Artists:
id name
Albums:
id artist_id year name
Songs:
id artist_id album_id name, body

При выборе автора, альбома и песни, показывать текст песни и формировать url вида http://домен/artist_name/album_name/song_name (все названия должны быть только алфавитно-цифровыми, пробелы заменены на "дефис")

Главная проблема с неалфавитными символами, например, есть артист "D'Cagostino & Gigi", альбом "Who doesn't ?... (Vol. 1)" и песни с названиями, которые содержат не прочие алфавитные знаки. Урлы должны быть типа: http://домен/d-cagostino-Gigi/who-doesn-t-vol-1/название_песни.

Вопрос: как при получении такого урла делать запросы к базе, чтобы получить id нужного, артиста, альбома и песни? Т.е. в базе хранятся название со всеми возможными символами, а в урлах только алфавитные и цифровые символы.

Ещё посоветуйте алгоритм, который преобразовывает "D'Cagostino & Gigi", "Who doesn't ?... (Vol. 1)" в красивые алфавитные урлы.
 
 Top
OrmaJever Модератор
Отправлено: 13 Декабря, 2010 - 13:47:08
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




AndyGrew пишет:
Т.е. в базе хранятся название со всеми возможными символами, а в урлах только алфавитные и цифровые символы.

а небред ли это? не проще в базу писать без всех символов? или в url писать id песни?


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
AndyGrew
Отправлено: 13 Декабря, 2010 - 13:51:08
Post Id


Новичок


Покинул форум
Сообщений всего: 4
Дата рег-ции: Дек. 2010  


Помог: 0 раз(а)




OrmaJever пишет:
а небред ли это? не проще в базу писать без всех символов? или в url писать id песни?


Ну как вариант завести ещё поле url, но название должны быть нормальным, со всеми неалфавитными символами.

А то, что url с названиями а не с id, лучше с точки зрения SEO и сразу видно в урле названия артиста, альбома и песни.
(Добавление)
Как лучше всего преобразовывать "D'Cagostino & Gigi/Who doesn't ?... (Vol. 1)" в "d-cagostino-gigi/who-doesn-t-vol-1" ? Сайт только англоязычный.
 
 Top
OrmaJever Модератор
Отправлено: 13 Декабря, 2010 - 13:54:28
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




зменятьфункцией str_replace()
PHP:
скопировать код в буфер обмена
  1. $str = 'D'Cagostino & Gigi/Who doesn't ?... (Vol. 1)';
  2. $str = str_replace(' ', '-', $str);
  3. // и так заменить все лишние символы на дифисы либо просто убрать.
  4.  


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
AndyGrew
Отправлено: 13 Декабря, 2010 - 13:58:08
Post Id


Новичок


Покинул форум
Сообщений всего: 4
Дата рег-ции: Дек. 2010  


Помог: 0 раз(а)




OrmaJever пишет:
$str = 'D'Cagostino & Gigi/Who doesn't ?... (Vol. 1)';
$str = str_replace(' ', '-', $str);
// и так заменить все лишние символы на дифисы либо просто убрать.

Не вариант, т.к. если делать для каждого символа (пробела, вопр. знака, апострофа, скобки и т.д.), то дефисы будут плодиться. Наверняка есть более красивый способ. Возможно с регулярными выражениями.
 
 Top
DlTA
Отправлено: 13 Декабря, 2010 - 14:11:34
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2952
Дата рег-ции: Окт. 2010  


Помог: 53 раз(а)




AndyGrew пишет:
Наверняка есть более красивый способ. Возможно с регулярными выражениями.
реголярка или str_replace(), это всего лишь методы.
а использовать можно не только тире но и подчеркивание
 
 Top
AndyGrew
Отправлено: 13 Декабря, 2010 - 14:22:27
Post Id


Новичок


Покинул форум
Сообщений всего: 4
Дата рег-ции: Дек. 2010  


Помог: 0 раз(а)




DlTA пишет:
реголярка или str_replace(), это всего лишь методы.
а использовать можно не только тире но и подчеркивание

Видимо с регуляркой лучше всего использовать preg_match_all().
Не могли бы написать регулярное выражение которое замменит все неалфавитно-цифровые символы на дефис? С регуляркой сейчас разбираюст, пока ничего не выходит, вот и спрашиваю лучший способ.
 
 Top
DlTA
Отправлено: 13 Декабря, 2010 - 14:32:59
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2952
Дата рег-ции: Окт. 2010  


Помог: 53 раз(а)




PHP:
скопировать код в буфер обмена
  1. $ishodaia_stroka = preg_replace('/\W/i','-',$ishodaia_stroka)

както так
 
 Top
OrmaJever Модератор
Отправлено: 13 Декабря, 2010 - 14:35:11
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




AndyGrew пишет:
выражение которое замменит все неалфавитно-цифровые символы на дефис?

В любом случае нужен список этих симловолов.
для замены preg_match_all() не годится. Если с регуляркой то preg_replace(), а в даном случае лутше str_replace().

(Отредактировано автором: 13 Декабря, 2010 - 14:36:10)



-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB