Хочу адреса вида "site.ru/раздел/название_страницы". Где "раздел" означает место страницы в мнимом, реально не существующем, каталоге. "название страницы" это название страницы заданное при написании. Вопросы: Какие могут быть грабли в использовании русскоязычного текста в адресе? Как реализовать возможность обработки адреса в зависимости от части "раздел" разными скриптами, расположенных в разных файлах. (Это важно, чтобы при изменении/доработке скрипта контрольной панели, случайно не вывести из работы обработку простых страниц) Перенаправление на файл со скриптом делать через mod_rewrite или есть более подходящие методы? как лучше разбить URL на составные части "раздел" и "название_страницы"? Обязательно использование знака "_" между словами или можно использовать пробелы? Данные страниц будут хранится в базе данных. Скрипт должен обработать URL и собрать страницу опираясь на "раздел" и "название страницы". Так же часть URL "раздел" может быть не всегда использована "раздел" необходим для более простого определения где в базе находится текст страницы, каким скриптом обрабатывать. А так же для удобного группирования страниц и приятного логического оформления. В итоге будет выглядеть примерно так: "site.ru/контрольная_панель/редактор" (раздел редактора, раздел администратора) "site.ru/блог/случай_на работе" (раздел сайта блог) "site.ru/электротехника/трехфазные_системы" (раздел по электротехнике, страница про трёхфазную сеть) "site.ru" (главная страница) Когда делал дипломную работу, тогда пользовался такими ссылками site.ru?id=3, теперь же делаю CMS для себя, хочу сразу сделать красиво.
Весь русский язык незаметно превращается в что-нить типа того http://site.ru/%D1%80%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9%2 ... 1%8B%D0%BA
igordata Это связанно с тем что кому то давно пора перейти на юникод. Так открывает твою ссылку Internet Explorer 8 Вот так открывает Mozilla 23 В мозилле даже при наведении курсора на ссылку, в строке состояния отображается Код (Text): http://site.ru/русский язык У меня весь сайт будет в UTF-8 как и хранящаяся информация в базе данных. Радует то, что превращаясь в кракозябры ссылка остаётся рабочей, ресурс я делаю для себя, поэтому гоняться за поддержкой устаревших мамонтов не собираюсь. Столкнулся с первыми граблями, настроил mod_rewrite Код (Text): RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php [L,QSA] перенаправление работает, но скрипт echo($_SERVER[REQUEST_URI]); выводит при запросе http://www.idhacker.ru/страница это /%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B0 Как мне преобразовать эти коды в нормальный текст? Эти косяки уже в REQUEST_URI или это функция echo так преобразовывает?
Помогло echo (urldecode($_SERVER[REQUEST_URI])); Я так понимаю строка в URL передаётся в другой кодировке, поэтому в $_SERVER[REQUEST_URI] получалась закодированная строка, и для обработки адреса мне всегда надо преобразовывать $_SERVER[REQUEST_URI] В общем, вполне работает таким образом, не зависимо от того на русском языке адрес или на английском, можно сделать многоязыковую адресацию. Пробелы в адресе можно свободно использовать. Первый элемент массива, с индексом 0, пустой, т.к. в начале адреса стоит "/". Код (Text): $adres = urldecode($_SERVER[REQUEST_URI]); $explode_adres = explode ("/", $adres); $page_adres = array_pop($explode_adres); $part_adres = array_pop($explode_adres); Остаётся добавить необходимые проверки и преобразования безопасности. Если в $page_adres ничего нет то переходить на главную страницу. В зависимости от $part_adres искать страницу в определённой таблице. Если раздела нет, то страница из корневого раздела сайта. Так же можно проверять наличие в $adres любых символов кроме букв и "/", при присутствии таковых сразу выводить страничку 404. Ещё сделать проверку, если после функции explode() больше составляющих чем необходимо, так же слать на 404.
а ты скопируй и вставь в блокнот например. Добавлено спустя 1 минуту 19 секунд: array_pop отрезает. так что это два разных элемента.
http://php.ru/manual/function.array-pop.html внимательное чтение явно не твой конек, но ты уж постарайся. Без этого никак в программировании. Старайся ловить детали в отличиях.
может ты сам обьяснишь дабы не ссылаясь на написанное, снова отмазка у тебя. еще раз: Добавлено спустя 4 минуты 7 секунд: Код (PHP): <?php $adres = "qqq/sssss/cccccc/"; $explode_adres = explode ("/", $adres); $page_adres = array_pop($explode_adres); $part_adres = array_pop($explode_adres); echo "$page_adres - $part_adres"; понял теперь )
Чуваки, чота вы мене загрузили, насколько я помню, первый array_pop должен вертать пустоту, ибо указатель автоматом перекидывается к несуществующему еще элементу массива. пойду проверю )
А чо, берем кусок примера от MAN_IFE_ST, дабы не плодить всякого Код (PHP): var_dump($page_adres,$part_adres); И видим: Код (PHP): string(0) "" string(6) "cccccc" Йопта, ой. З.Ы. php 5.5.3
хз че там где, у меня всё пашет =) Код (PHP): <?php $a = ['a','b','c']; var_dump(array_pop($a)); var_dump(array_pop($a)); var_dump(array_pop($a)); echo "<br><hr><br>"; $b = 'a b c'; $b = explode(' ', $b); var_dump(array_pop($b)); var_dump(array_pop($b)); var_dump(array_pop($b)); Код (Text): string 'c' (length=1) string 'b' (length=1) string 'a' (length=1) string 'c' (length=1) string 'b' (length=1) string 'a' (length=1)