Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Регулярные Выражения

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Точное определение обращения к URL
 
 автор: deimand   (12.03.2012 в 18:12)   письмо автору
 
 

Не могу написать регулярное выражение, которое отсеит все что стоит после последнего слеша, независимо от того что там будет написано. Количество директорий может быть переменным, поэтому количество слешей заранее не известно. Если конечно их специально не считать. Ссылки могут быть на русском и на латинском.

<?php
 
// $_SERVER['REQUEST_URI'] может иметь вид
 // /раскрутка_сайтов/русские_символы_в_url/?играюсь
 // /раскрутка_сайтов/русские_символы_в_url/index.php?
 // /раскрутка_сайтов/русские_символы_в_url/так_ли_нужны_русские_буквы_в_url

 
$uri rawurldecode($_SERVER['REQUEST_URI']);
 
$dir preg_replace('/нужно составить такое выражение/u'''$uri);

 
// чтобы на выходе (в $dir) получилось /раскрутка_сайтов/русские_символы_в_url/

Спасибо.

  Ответить  
 
 автор: cheops   (12.03.2012 в 19:43)   письмо автору
 
   для: deimand   (12.03.2012 в 18:12)
 

Попробуйте так
<?php 
 
// $_SERVER['REQUEST_URI'] может иметь вид 
 // /раскрутка_сайтов/русские_символы_в_url/?играюсь 
 // /раскрутка_сайтов/русские_символы_в_url/index.php? 
 // /раскрутка_сайтов/русские_символы_в_url/так_ли_нужны_русские_буквы_в_url 

 
$uri rawurldecode($_SERVER['REQUEST_URI']); 
 
$dir preg_replace('|^(/раскрутка\s+сайтов/русские\s+символы\s+в\s+url/)(.*)$|u''\\1'$uri); 

 
// чтобы на выходе (в $dir) получилось /раскрутка_сайтов/русские_символы_в_url/
или вместо раскрутка_сайтов/русские_символы_в_url может быть что угодно не обязательно эти фразы?

  Ответить  
 
 автор: deimand   (12.03.2012 в 20:27)   письмо автору
 
   для: cheops   (12.03.2012 в 19:43)
 

Да, текст может быть каким угодно. Но есть закономерность - последний слэш. Грубо говоря получить все до последнего слэша включительно, или обрезать все после последнего слэша. Кажется просто, а вот сделать рабочее решение не удается.

Всегда можно рассплитовать строку через слэш, откинуть крайний элемент массива и снова собрать, но хотелось бы элегантно, в одну строчку.

  Ответить  
 
 автор: Sfinks   (12.03.2012 в 21:13)   письмо автору
 
   для: deimand   (12.03.2012 в 20:27)
 

Обязательно РВ? Может проще?
explode();
array_pop();
implode();

  Ответить  
 
 автор: deimand   (12.03.2012 в 21:34)   письмо автору
 
   для: Sfinks   (12.03.2012 в 21:13)
 

Проще да.

  Ответить  
 
 автор: Sfinks   (12.03.2012 в 21:48)   письмо автору
 
   для: deimand   (12.03.2012 в 21:34)
 

не увидел вашу строку "Всегда можно рассплитовать строку...."
Можно так:
<?
  $str 
substr$str strrpos$str "/" ) ) . "/";
  
// или
  
$str substr$str strrpos$str "/" )+);

  Ответить  
 
 автор: deimand   (13.03.2012 в 00:32)   письмо автору
 
   для: deimand   (12.03.2012 в 21:34)
 

Скорее даже не проще, а так будет действительно лучше.

Есть такая проблема:

Если ипользовать в htaccess выражение перенаправляющее все на index.php
RewriteRule !.(gif|css|jpg|jpeg|png|ico|zip|doc)$ index.php [L]
то приписывая к ссылке какой-нибудь свободный текст, можно наставить на одну страницу миллион модификаций ссылок, плюс ко всему будет дергаться каждый раз центрально ядро, вместо того чтобы просто отдать статический файл.

Вот собственно этот головняк я и решаю.

Варианты с обратными прокси серверами для кэширования не подходят, так как работает кроссдоменный механизм, основанный на этом API и чем более внимательным будет собственный механизм кэширования, тем меньше запросов будет приходить на мозг всей сети.

Я уже все сделал, вопрос решен, всем спасибо.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования