note 72107 added to ref.pcre
| From: | orijing at gmail dot com | Date: | Wed, 03 Jan 2007 05:18:33 +0000 |
| Subject: | note 72107 added to ref.pcre | ||
| Groups: | php.notes | ||
| Request: | Send a blank email to php-notes+get-121223@lists.php.net to get a copy of this message | ||
To make sure my IPB forum (http://originxt.com -- click around and notice the clean SEO-friendly
URLs) spits out only the most clean URLs, I use PCRE to check and clean every single internal link.
I use the following, which I put in functions.php and is called by a preg_replace with
'ie' in the display class file.
<?php
function parse_queries($query,$type='a',$the_base)
{
global $ibforums;
if(strstr(strtolower($_SERVER['SystemRoot']),'win') !== false) return $query;
$query = str_replace(
array('&','&','=','/act-','/code-','/home/','/00/'),
array('/','/','-','/','/','/','/'),
strtolower(preg_replace("#/*\##","/#","/".$query."/"))
);
// cut off empty values
$match = "#/([\d\w_]*?)-0?/#";
while(preg_match($match,$query))
{
$query = preg_replace($match,"/",$query);
}
// mnemonic changes
$query = preg_replace(
array
(
"#/post/02/f-\d+/t-(\d+)/qpid-(\d+)/#",
"#/post/02/f-\d+/t-(\d+)/#",
"#/st/f-\d+/t-(\d+)/#",
"#/post/14/f-\d+/t-(\d+)/#",
"#/(post/0?8/f-\d+/t-\d+/p|editpost)-(\d+)/#",
"#^.+findpost(.*?)/(pid|p)-(\d+)/#",
"#/p-\d+/#",
"#/post/10/f-(\d+)/#",
"#/post/f-(\d+)/#",
"#/msg/0?4/mid-(\d+)/#",
"#/msg/0?3/msid-(\d+)/#",
),
array
(
"/node/$1/quote/$2/",
"/node/$1/reply/",
"/node/$1/",
"/node/$1/addpoll/",
"/posts/$2/edit/",
"/posts/$3$1/",
"/",
"/cat/$1/poll/",
"/cat/$1/new/",
"/members/$1/pm/",
"/messages/$1/",
),
$query);
$query = str_replace(
array('/idx','/sf/f-','/showforum-',
'/st/t-','/showtopic-','/profile/mid-','/showuser-'),
array('/forums','/cat/','/cat/','/node/',
'/node/','/members/','/members/'),
$query
);
// if guest, remove the member-only stuff (sessions, mode, view, etc)
if(!$ibforums->member['id'] and strtolower($type) == 'a')
{
if(preg_match(
"#/(usercp|forward|print|online|mod|track)/#i"
,$query))
{
$query = "//";
}
else $query = preg_replace(array("#/mode-\w+/#",
"#/view-\w+/#"),"/",$query);
}
// make sure /st is second in line
$query = preg_replace("#^/+(\w+/[^/]+?)/(.*?)/st-(\d+)#",
"/$1/st-$3/$2",$query);
$query = preg_replace(
array("#/node/(\d+)/st-(\d+)#",
"#/cat/(\d+)/st-(\d+)#"),
array("/node/$1.$2","/cat/$1.$2"),
$query
);
// Take away trailing and beginning /s
$query = preg_replace("#/+\##","#",$query);
$query = preg_replace(array("#/+$#","#^/+#"),"",$query);
return $query;
}
?>
Enjoy. It needs optimization, for sure, but it gets the job done on a server of pretty much
unlimited resources.
----
Server IP: 64.71.164.2
Probable Submitter: 67.164.66.46
----
Manual Page -- http://www.php.net/manual/en/ref.pcre.php
Edit -- https://master.php.net/note/edit/72107
Del: integrated -- https://master.php.net/note/delete/72107/integrated
Del: useless -- https://master.php.net/note/delete/72107/useless
Del: bad code -- https://master.php.net/note/delete/72107/bad+code
Del: spam -- https://master.php.net/note/delete/72107/spam
Del: non-english -- https://master.php.net/note/delete/72107/non-english
Del: in docs -- https://master.php.net/note/delete/72107/in+docs
Del: other reasons-- https://master.php.net/note/delete/72107
Reject -- https://master.php.net/note/reject/72107
Search -- https://master.php.net/manage/user-notes.php