greek url conversion and trim unwated numbers and symbols - php

This problem is little complicated since i'm newbee to php encoding.
My site uses utf-8 encoding.
After a lot of tests, i found some solution. I use this kind of code:
function chr_conv($str)
{
$a=array with pattern('%CE%B2','%CE%B3','%CE%B4','%CE%B5' etc..);
$b=array with replacement characters(a,b,c,d, etc...);
return str_replace($a, $b2, $str);
}
function replace_old($str)
{
$a1 = array ('index.php','/http://' etc...);
$a2 = array with replacement characters('','' etc...);
return str_replace($a1, $a2, $str);
}
function sanitize($url)
{
$url= replace_old(replace_old($url));
$url = strtolower($url);
$url = preg_replace('/[0-9]/', '', $url);
$url = preg_replace('/[?]/', '', $url);
$url = substr($url,1);
return $url;
}
function wbz404_process404()
{
$options = wbz404_getOptions();
$urlRequest = $_SERVER['REQUEST_URI'];
$url = chr_conv($urlRequest);
$requestedURL = replace_old(replace_old($url));
$requestedURL .= wbz404_SortQuery($urlParts);
//Get URL data if it's already in our database
$redirect = wbz404_loadRedirectData($requestedURL);
echo sanitize($requestedURL);
echo "</br>";
echo $requestedURL;
echo "</br>";
}
When incoming url is:
/content.php?147-%CE%A8%CE%AC%CF%81%CE%B9-%CE%BC%CE%B5-%CF%80%CF%81%CE%AC%CF%83%CE%B1%28%CE%A7%CE%BF%CF%8D%CE%BC%CF%80%CE%BB%CE%B9%CE%BA%29";
I get:
/content.php?147-psari-me-prasa-choumplik
I want only:
/psari-me-prasa-choumplik
without the content.php?147- before URL.
BUT the most important problem is that I get ENDLESS LOOP instead of correct URL.
What am i doing wrong?
Have in mind that .htaccess solution won't work since i have a lighttpd server, not Apache.

If you need
I am assuming it's not always ?147- that you need to skip. But always after the first hyphen. In which case, before the echo add the following:
$requestedURL = substr($requestedURL, strrpos( $requestedURL , '-') +1 );
This will search for the position of the first hyphen and return that, add one so you skip the hyphen itself, and use that to cut the $requestedURL string up after the hyphen to the end of the string.
If it's always /content.php?127- then replace strrpos( $requestedURL , '-') +1 with the number 17.

Related

PHP replace URL segment with str_replace();

I have "/foo/bar/url/" coming straight after my domain name.
What I want is to find penultimate slash symbol in my string and replace it with slash symbol + hashtag. Like so: from / to /# (The problem is not how to get URL, but how to handle it)
How this could be achieved? What is the best practice for doing stuff like that?
At the moment I'm pretty sure that I should use str_replace();
UPD. I think preg_replace() would be suitable for my case. But then there is another problem: what should regexp look like in order to make my issue solved?
P.S. Just in a case I'm using SilverStripe framework (v3.1.12)
$url = '/foo/bar/url/';
if (false !== $last = strrpos($url, '/')) {
if (false !== $penultimate = strrpos($url, '/', $last - strlen($url) - 1)) {
$url = substr_replace($url, '/#', $penultimate, 1);
}
}
echo $url;
This will output
/foo/bar/#url/
If you want to strip the last /:
echo rtrim($url, '/'); // print /foo/bar/#url
Here is a method that would function. There are probably cleaner ways.
// Let's assume you already have $url_string populated
$url_string = "http://whatever.com/foo/bar/url/";
$url_explode = explode("\\",$url_string);
$portion_count = count($url_explode);
$affected_portion = $portion_count - 2; // Minus two because array index starts at 0 and also we want the second to last occurence
$i = 0;
$output = "";
foreach ($url_explode as $portion){
$output.=$portion;
if ($i == $affected_portion){
$output.= "#";
}
$i++;
}
$new_url = $output;
Assuming you now have
$url = $this->Link(); // e.g. /foo/bar/my-urlsegment
You can combine it like
$handledUrl = $this->ParentID
? $this->Parent()->Link() + '#' + $this->URLSegment
: $this->Link();
where $this->Parent()->Link() is e.g. /foo/bar and $this->URLSegment is my-urlsegment
$this->ParentID also checks if we have a parent page or are on the top level of SiteTree
I might be tooooo late for answering this question but I thought this might help you. You can simply use preg_replace like as
$url = '/foo/bar/url/';
echo preg_replace('~(\/)(\w+)\/$~',"$1#$2",$url);
Output:
/foo/bar/#url
In my case this solved my problem:
$url = $this->Link();
$url = rtrim($url, '/');
$url = substr_replace($url, '#', strrpos($url, '/') + 1, 0);

PHP Regex to Remove http:// from string

I have full URLs as strings, but I want to remove the http:// at the beginning of the string to display the URL nicely (ex: www.google.com instead of http://www.google.com)
Can someone help?
$str = 'http://www.google.com';
$str = preg_replace('#^https?://#', '', $str);
echo $str; // www.google.com
That will work for both http:// and https://
You don't need regular expression at all. Use str_replace instead.
str_replace('http://', '', $subject);
str_replace('https://', '', $subject);
Combined into a single operation as follows:
str_replace(array('http://','https://'), '', $urlString);
Better use this:
$url = parse_url($url);
$url = $url['host'];
echo $url;
Simpler and works for http:// https:// ftp:// and almost all prefixes.
Why not use parse_url instead?
To remove http://domain ( or https ) and to get the path:
$str = preg_replace('#^https?\:\/\/([\w*\.]*)#', '', $str);
echo $str;
If you insist on using RegEx:
preg_match( "/^(https?:\/\/)?(.+)$/", $input, $matches );
$url = $matches[0][2];
Yeah, I think that str_replace() and substr() are faster and cleaner than regex. Here is a safe fast function for it. It's easy to see exactly what it does. Note: return substr($url, 7) and substr($url, 8), if you also want to remove the //.
// slash-slash protocol remove https:// or http:// and leave // - if it's not a string starting with https:// or http:// return whatever was passed in
function universal_http_https_protocol($url) {
// Breakout - give back bad passed in value
if (empty($url) || !is_string($url)) {
return $url;
}
// starts with http://
if (strlen($url) >= 7 && "http://" === substr($url, 0, 7)) {
// slash-slash protocol - remove https: leaving //
return substr($url, 5);
}
// starts with https://
elseif (strlen($url) >= 8 && "https://" === substr($url, 0, 8)) {
// slash-slash protocol - remove https: leaving //
return substr($url, 6);
}
// no match, return unchanged string
return $url;
}
<?php
// (PHP 4, PHP 5, PHP 7)
// preg_replace — Perform a regular expression search and replace
$array = [
'https://lemon-kiwi.co',
'http://lemon-kiwi.co',
'lemon-kiwi.co',
'www.lemon-kiwi.co',
];
foreach( $array as $value ){
$url = preg_replace("(^https?://)", "", $value );
}
This code output :
lemon-kiwi.co
lemon-kiwi.co
lemon-kiwi.co
www.lemon-kiwi.co
See documentation PHP preg_replace

php encoding cookie values encoding

I have some raw cookies . Basically blocks like this :
$block_simple = 'amsterdam=^a2p=4e52bafe90000000000.^sfLMD=1144330254^sbf=#c0000000a0000000004^cos=5^cv=15555^sin=in^js=1^dv=4e52b496^; dp1=bpcid/1907355535033e818^a1p/04e540618^fm/5.3.24e7a1bc1^kms/in52151b98^pbf/#80000000045033e818^mpc/0|34e5fe398^reg/^flagReg=1^52151b98^tzo/-3c52151b96^u1p/Y2xlbW8xMDQ35033e818^u1f/bill5033e818^idm/14e568347^; cssg=f27d4a5f1310a47ac5c0d1b0ffe1e901; nonsession=BAQAAATHFlnoQAAaAAEAACVAz6BhjbGVtbzEwNDcABAAJUDPCQWNsZW1vMTA0NwFkAAJQM gYIzIAygAgV7i2GGYyN2Q0YTVmMTMxMGE0N2FjNWMwZDFiMGZmZTFlOTAxAKoAAVAz6BgwAMsAAk5Su6A4MgFMABhQM gYNGU1MmI0OTguMC4xLjIuMTA3LjQuMC4zAU0AF1Az6Bg0ZTUyYjQ2Ny4wLjEuMy40MC4wLjAuMwAQAAlQM gYY2xlbW8xMDQ3ADMAC1Az6BhCQTIgOEpRLEdCUgDzACJQM gYJDIkbG9FSFZIa2ckejFOaDdjZTE4NWpKTENJWXpHemRrMQCaAApOU BBY2xlbW8xMDQ3aACcADhQM gYblkrc0haMlByQm1kajZ3Vm5ZK3NFWjJQckEyZGo2d0drSVdvQzVLR3FRdWRqNng5blkrc2VRPT0AnQAIUDPoGDAwMDAwMDAxM5dSPx0CaJX1ZoMRrBnZ/7dgQSM*; cid=8jLVETzyhohsSktA#190735553; npii=btrm/svid=572133042035033e6be^tguid/f27d4a5f1310a47ac5c0d1b0ffe1e9015033e6be^cguid/f27d65741310a47a26f398e3fe7999045033e6be^; lucky9=2524611; ds1=ats/1314038674493; secses=BAQAAATHFlnoQAAaAAUsAF1Az6Bg0ZTUyYjQ5OC4wLjEuMi44OS40LjAuM70LVKpcj67yqpxdXqgT56WI5Ov ; ds2=ssts/1314043029160^';
and I need to convert them in blocks like this
$block_coded = 'amsterdam=%5Ea2p%3D4e52bafe90000000000.%5EsfLMD%3D1144330254%5Esbf%3D%23c0000000a0000100004%5Ecos%3D5%5Ecv%3D15555%5Esin%3Din%5Ejs%3D1%5Edv%3D4e52b464%5E; dp1=bpcid/1907355535033e7e7^a1p/04e5405e7^fm/5.3.24e7a1bc1^kms/in52151b67^pbf/%2380000000045033e7e7^mpc/0%7C34e5fe367^reg/%5EflagReg%3D1%5E57bb58e5^tzo/-3c52151b64^u1p/Y2xlbW8xMDQ35033e7e7^idm/14e568347^u1f/bill5033e7e7^; cssg=f27d4a5f1310a47ac5c0d1b0ffe1e901; s=BAQAAATHFlnoQAAWAAAEACU5T9RJjbGVtbzEwNDcAEgAKTlQF53Rlc3RDb29raWUAAwAFTlQF5zE2Mzg0APQAIk5UBeckMiRsb0VIVkhrZyR6MU5oN2NlMTg1akpMQ0lZekd6ZGsxAWUAAk5UBecjMgFFAAhQM+fnNDM3ZWRjNzUABgABTlQF5zAAqAABTlP1EjEA+AAgTlQF52YyN2Q0YTVmMTMxMGE0N2FjNWMwZDFiMGZmZTFlOTAxAUoAGE5UBec0ZTUyYjJjOS4wLjEuMi4xMDkuNC4wLjMADAAJTlQF5zIwNzkzMjQ4NwA9AAlOVAXnY2xlbW8xMDQ3euTn0ezKbK6+M6o3TtjWa5K1jLQ*; nonsession=BAQAAATHFlnoQAAaAAEAACVAz5+djbGVtbzEwNDcABAAJUDPCQWNsZW1vMTA0NwFkAAJQM+fnIzIAqgABUDPn5zAAygAgV7i152YyN2Q0YTVmMTMxMGE0N2FjNWMwZDFiMGZmZTFlOTAxAMsAAk5Su284MQFMABhQM+fnNGU1MmI0NjcuMC4xLjIuMTA3LjQuMC4zAU0AF1Az5+c0ZTUyYjQ2Ny4wLjEuMy40MC4wLjAuMwAQAAlQM+fnY2xlbW8xMDQ3ADMAC1Az5+dCQTIgOEpRLEdCUgDzACJQM+fnJDIkbG9FSFZIa2ckejFOaDdjZTE4NWpKTENJWXpHemRrMQCaAApOU+BBY2xlbW8xMDQ3aACcADhQM+fnblkrc0haMlByQm1kajZ3Vm5ZK3NFWjJQckEyZGo2d0drSVdvQzVLR3FRdWRqNng5blkrc2VRPT0AnQAIUDPn5zAwMDAwMDAxYMkmH+tedAVimO9p45ia+VNV6Wg*; cid=8jLVETzyhohsSktA%23190735553; npii=btrm/svid%3D572133042035033e6be^tguid/f27d4a5f1310a47ac5c0d1b0ffe1e9015033e6be^cguid/f27d65741310a47a26f398e3fe7999045033e6be^; lucky9=2524611; ds1=ats/1314038674493; ns1=BAQAAATHFlnoQAAaAAKUADFAz5+cyMDc5MzI0ODcvMDtGXDKnc1RHs8+T/0pDNtDJKyP2xQ**; secses=BAQAAATHFlnoQAAaAAUsAF1Az5+c0ZTUyYjQ2Ny4wLjEuMi44OS40LjAuM9lRXjfUdgATs53TH5Qcyhx8OdqF; shs=BAQAAATHFlnoQAAaAAVUADk5b3hIyMDYyNDU1NzAwMDMsMSg9MHLlFoepc4NzCZHM8McIjWiy; ds2=ssts/1314043024564^';
I'm not even sure what encrypting/encoding method is used for the 2nd block because is quite weird. A straightforward solution is my request .
**UPDATE: arnaud576875 Provided a solution
function urlencode_cb($matches) {
return $matches[1] . rawurlencode($matches[2]);
}
$block_coded = preg_replace_callback('#(\w+?=)([^\s;]+)\s*#', 'urlencode_cb', $block_simple);
but it doesn't work for all the blocks (actually fails to 50% of them ). Here is an example where the above function is not working .
$block_simple ='amsterdam=^a2p=4e53c10790000000000.^lrtjs=1.1^sfLMD=1144330254^sbf=#c0000000a0008000004^cos=5^cv=15555^sin=in^lvmn=2|0|130519409054|180712051981|^js=1^dv=4e53c023^; dp1=bvrvi/0|0|4e60ef26^pcid/1907355535034f3a6^a1p/04e5511a6^fm/5.3.24e7a1bc1^kms/in52162726^pbf/#6000000088000000045034f3a6^mpc/0|34e60ef26^reg/^flagReg=1^52162726^tzo/-3c52162723^u1p/Y2xlbW8xMDQ35034f3a6^idm/14e568347^u1f/bill5034f3a6^; cssg=f27d4a5f1310a47ac5c0d1b0ffe1e901; nonsession=BAQAAATHFlnoQAAaAAEAACVA086ZjbGVtbzEwNDcABAAJUDPCQWNsZW1vMTA0NwFkAAJQNPOmIzIACAAcTntNJjEzMTQxMDkzMDR4MTMwNTE5NDA5MDU0eDB4Mk4AqgABUDTzpjAAygAgV7nBpmYyN2Q0YTVmMTMxMGE0N2FjNWMwZDFiMGZmZTFlOTAxAMsAA05Txy4xNDMBTAAYUDTzpjRlNTNjMDI2LjAuMS4yLjEwNy40LjAuMwFNABdQNPOmNGU1M2I3OGMuMC4xLjMuNDAuMC4wLjMAEAAJUDTzpmNsZW1vMTA0NwAzAAtQNPOmQkEyIDhKUSxHQlIA8wAiUDTzpiQyJGxvRUhWSGtnJHoxTmg3Y2UxODVqSkxDSVl6R3pkazEAmgAKTlPgQWNsZW1vMTA0N2gAnAA4UDTzpm5ZK3NIWjJQckJtZGo2d1ZuWStzRVoyUHJBMmRqNndHa0lXb0M1S0dxUXVkajZ4OW5ZK3NlUT09AJ0ACFA086YwMDAwMDAwMardeUkKMs4Os7ChwB6XUI1HBogs; cid=8jLVETzyhohsSktA#190735553; npii=btrm/svid=572133042035034eabb^cguid/f27d65741310a47a26f398e3fe7999045034eabb^tguid/f27d4a5f1310a47ac5c0d1b0ffe1e9015034eabb^; lucky9=2524611; ds1=ats/1314038674493; secses=BAQAAATHFlnoQAAaAAUsAF1A086Y0ZTUzYzAyNi4wLjEuMi44OS41LjAuMxLtD8ybEPsI/sx10s7RA5 bEe8A; ds2=ssts/1314111522013^';
$block_coded='amsterdam=%5Ea2p%3D4e53c10790000000000.%5Elrtjs%3D1.1%5EsfLMD%3D1144330254%5Esbf%3D%23c0000000a0008100004%5Ecos%3D5%5Ecv%3D15555%5Elvmn%3D2%7C0%7C130519409054%7C180712051981%7C%5Esin%3Din%5Ejs%3D1%5Edv%3D4e53bfa6%5E; dp1=bvrvi/0%7C0%7C4e60eeaa^pcid/1907355535034f32a^a1p/04e55112a^fm/5.3.24e7a1bc1^pbf/%236000000088000000045034f32a^mpc/0%7C34e60eeaa^kms/in521626aa^reg/%5EflagReg%3D1%5E57bc6427^tzo/-3c521626a6^u1p/Y2xlbW8xMDQ35034f32a^u1f/bill5034f32a^idm/14e568347^; cssg=f27d4a5f1310a47ac5c0d1b0ffe1e901; s=BAQAAATHFlnoQAAWAAAEACU5T9RJjbGVtbzEwNDcAAwAFTlURKjE2Mzg0AUUACFA08yo0MzdlZGM3NQFlAAJOVREqIzIABgABTlURKjAAqAABTlP1EjEBSgAYTlURKjRlNTNiZmFhLjAuMS4yLjEwOS41LjAuMwAMAAlOVREqMjA3OTMyNDg3AO4AF05VESowBmh0dHA6Ly93d3cuZWJheS5jb20vBwASAApOVREqdGVzdENvb2tpZQD0ACJOVREqJDIkbG9FSFZIa2ckejFOaDdjZTE4NWpKTENJWXpHemRrMQD4ACBOVREqZjI3ZDRhNWYxMzEwYTQ3YWM1YzBkMWIwZmZlMWU5MDEAPQAJTlURKmNsZW1vMTA0N5ldduI42WNQc0BpBDVJ17THzygM; nonsession=BAQAAATHFlnoQAAaAAEAACVA08ypjbGVtbzEwNDcABAAJUDPCQWNsZW1vMTA0NwFkAAJQNPMqIzIACAAcTntMqjEzMTQxMDkzMDR4MTMwNTE5NDA5MDU0eDB4Mk4AygAgV7nBKmYyN2Q0YTVmMTMxMGE0N2FjNWMwZDFiMGZmZTFlOTAxAKoAAVA08yowAMsAA05TxrIxNDIBTAAYUDTzKjRlNTNiZmFhLjAuMS4yLjEwNy40LjAuMwFNABdQNPMqNGU1M2I3OGMuMC4xLjMuNDAuMC4wLjMAEAAJUDTzKmNsZW1vMTA0NwAzAAtQNPMqQkEyIDhKUSxHQlIA8wAiUDTzKiQyJGxvRUhWSGtnJHoxTmg3Y2UxODVqSkxDSVl6R3pkazEAmgAKTlPgQWNsZW1vMTA0N2gAnAA4UDTzKm5ZK3NIWjJQckJtZGo2d1ZuWStzRVoyUHJBMmRqNndHa0lXb0M1S0dxUXVkajZ4OW5ZK3NlUT09AJ0ACFA08yowMDAwMDAwMaIuK/YCex+5DdAYEm4BqgIwoGfu; cid=8jLVETzyhohsSktA%23190735553; npii=btrm/svid%3D572133042035034eabb^cguid/f27d65741310a47a26f398e3fe7999045034eabb^tguid/f27d4a5f1310a47ac5c0d1b0ffe1e9015034eabb^; lucky9=2524611; ds1=ats/1314038674493; ns1=BAQAAATHFlnoQAAaAAKUADFA08yoyMDc5MzI0ODcvMDusUc6LAcEB+oxRkYBCNdqXjlbT6A**; secses=BAQAAATHFlnoQAAaAAUsAF1A08yo0ZTUzYmZhYS4wLjEuMi44OS41LjAuM8+VafwG8wCngDZdwt073uO7PTRH; shs=BAQAAATHFlnoQAAaAAVUADk5b3hIyMDYyNDU1NzAwMDMsMSg9MHLlFoepc4NzCZHM8McIjWiy; ds2=ssts/1314111517271^';
you can use rawurlencode or urlencode (the only difference between them is the second that encode also the "~" character)
http://php.net/manual/en/function.rawurlencode.php
http://php.net/manual/en/function.urlencode.php
I think you want to apply rawurlencode on each value. You could do this:
$cookies = preg_split('/[; ]+/', $block_coded, -1, PREG_SPLIT_NO_EMPTY);
foreach ($cookies as &$cookie) {
list($name, $value) = explode('=', $cookie, 2);
$cookie = $name.'='.rawurlencode($value);
}
$block_coded = implode('; ', $cookies);
my php cookie value encode function:
<?
function encode_cookie_value($value)
{return strtr($value,
array_combine(str_split($tmp=",; \t\r\n\013\014"),
array_map('rawurlencode', str_split($tmp))
)
);
}
setrawcookie('kk', encode_cookie_value('jk=jk?jk-/":jk;jk jk,jk'));
?>

Remove protocl and subdomain from URL

I have a string like this:
http://www.downlinegoldmine.com/viralmarketing
I need to remove http://www. from the string if it exists, as well as http:// if www is not included.
In few words I just need the domain name without any protocol.
parse_url is the perfect tool for the job. You would first call it to split the url in parts, then check the hostname part to see if it starts with www. and strip it, then assemble the url back.
Update: code
echo normalize_url('http://www.downlinegoldmine.com/viralmarketing');
function normalize_url($url) {
$parts = parse_url($url);
unset($parts['scheme']);
if (substr($parts['hostname'], 0, 4) == 'www.') {
$parts['hostname'] = substr($parts['hostname'], 4);
}
if (function_exists('http_build_url')) {
// This PECL extension makes life a lot easier
return http_build_url($parts);
}
// Otherwise it's the hard way
$result = null;
if (!empty($parts['username'])) {
$result .= $parts['username'];
if (!empty($parts['password'])) {
$result .= ':'.$parts['password'];
}
$result .= '#';
}
$result .= $parts['host'].$parts['path'];
if (!empty($parts['query'])) {
$result .= '?'.$parts['query'];
}
if (!empty($parts['fragment'])) {
$result .= '#'.$parts['fragment'];
}
return $result;
}
See it in action.
Just use parse_url (see: http://php.net/manual/de/function.parse-url.php ). It will also incorporate different protocols and paths etc.
$nvar = preg_replace("#http://(www\.)?#i", "", "http://www.downlinegoldmine.com/viralmarketing");
Test:
php> echo preg_replace("#http://(www\.)?#i", "", "http://www.downlinegoldmine.com/viralmarketing");
downlinegoldmine.com/viralmarketing
php> echo preg_replace("#http://(www\.)?#i", "", "http://downlinegoldmine.com/viralmarketing");
downlinegoldmine.com/viralmarketing
There's probably a better way, but:
$url = preg_replace("#^(http://)?(www\\.)?#i", "", $url);
$url = strncmp('http://', $url, 7) ? $url : substr($url, 7);
$url = strncmp('www.', $url, 4) ? $url : substr($url, 4);
You can use the following to remove the https://, http://, and www. from a url.
$url = 'http://www.downlinegoldmine.com/viralmarketing';
echo preg_replace('/https?:\/\/|www./', '', $url);
above returns downlinegoldmine.com/viralmarketing
and you can use the following to remove the urls path as well as the https://, http://, and www..
$url = 'http://www.downlinegoldmine.com/viralmarketing';
echo implode('/', array_slice(explode('/',preg_replace('/https?:\/\/|www./', '', $url)), 0, 1));
above returns downlinegoldmine.com

Codeigniter and preg_replace

I use Codeigniter to create a multilingual website and everything works fine, but when I try to use the "alternative languages helper" by Luis I've got a problem. This helper uses a regular expression to replace the current language with the new one:
$new_uri = preg_replace('/^'.$actual_lang.'/', $lang, $uri);
The problem is that I have a URL like this: http://www.example.com/en/language/english/ and I want to replace only the first "en" without changing the word "english". I tried to use the limit for preg_replace:
$new_uri = preg_replace('/^'.$actual_lang.'/', $lang, $uri, 1);
but this doesn't work for me. Any ideas?
You could do something like this:
$regex = '#^'.preg_quote($actual_lang, '#').'(?=/|$)#';
$new_uri = preg_replace($regex, $lang, $uri);
The last capture pattern basically means "only match if the next character is a forward slash or the end of the string"...
Edit:
If the code you always want to replace is at the beginning of the path, you could always do:
if (stripos($url, $actual_lang) !== false) {
if (strpos($url, '://') !== false) {
$path = parse_url($url, PHP_URL_PATH);
} else {
$path = $url;
}
list($language, $rest) = explode('/', $path, 2);
if ($language == $actual_lang) {
$url = str_replace($path, $lang . '/' . $rest, $url);
}
}
It's a bit more code, but it should be fairly robust. You could always build a class to do this for you (by parsing, replacing and then rebuilding the URL)...
If you know what the beginning of the URL will always, be, use it in the regex!
$domain = "http://www.example.com/"
$regex = '#(?<=^' . preg_quote($domain, '#') . ')' . preg_quote($actual_lang, '#') . '\b#';
$new_uri = preg_replace($regex, $lang, $uri);
In the case of your example, the regular expression would become #(?<=^http://www.example.com/)en\b which would match en only if it followed the specified beginning of a domain ((?<=...) in a regular expression specifies a positive lookbehind) and is followed by a word boundary (so english wouldn't match).

Categories