How do I use preg_replace text/url. For example, I have a url like this: http://www.web.org/dorama/1201102144/hitoya-no-toge. I just want to show web.org. The url is not always same, for example sometimes it's: http://www.web.org/movies/123/no etc.
I only know the basics of it. Here is what I tried. It still does not delete the slash.
$url = "http://www.web.org/dorama/1201102144/hitoya-no-toge";
$patterns = array();
$patterns[0] = '/http:/';
$patterns[1] = '/dorama/';
$patterns[2] = '/1201102144/';
$replacements = array();
$replacements[2] = '';
$replacements[1] = '';
$replacements[0] = '';
echo preg_replace($patterns, $replacements, $url);
result when i run it //www.web.org///hitoya-no-toge
For such a job, I'd use parse_url then explode:
$url = "http://www.web.org/dorama/1201102144/hitoya-no-toge";
$host = (parse_url($url))['host'];
$domain = (explode('.', $host, 2))[1];
echo $domain;
Output:
web.org
Use preg_match instead preg_replace i think http://php.net/manual/en/function.preg-match.php
// get host name from URL
preg_match('#^(?:http://)?([^/]+)#i', $url, $matches);
$host = $matches[1];
// get last two segments of host name
preg_match('/[^.]+\.[^.]+$/', $host, $matches);
echo "{$matches[0]}"
If use https change http to https, I don't know how to make it work for http and https.
Related
I'm trying to get a very specific part of a URL using PHP so that I can use it as a variable later on.
The URL I have is:
https://forums.mydomain.com/index.php?/clubs/11-Default-Club
The particular part I am trying to extract is the 11 part between the /clubs/ and -Default-Club bits.
I was wondering what the best way to do this was. I've seen examples on here that use a regex-esque parser but I can't wrap my head around it for this particular instance.
Thanks
Edit; this is what I've tried so far using an explode query, but it seems to give me all sorts of elements which are not present in the URL above:
$url = $_SERVER['REQUEST_URI'];
$url = explode('/', $url);
$url = array_filter($url);
$url = array_merge($url, array());
Which returns:
Array ( [0] => index.php?app=core&module=system&controller=widgets&do=getBlock&blockID=plugin_9_bimBlankWidget_dqtr03ssz&pageApp=core&pageModule=clubs&pageController=view&pageArea=header&orientation=horizontal&csrfKey=8e19769b95c733b05439755827a98ac8 )
If you expect that the string with dashes (11-Default-Club) will be always at the end you can try this:
$url = $_SERVER['REQUEST_URI'];
$urlParts = explode('/', $url);
$string = end($urlParts);
$stringParts = explode('-', $string);
$theNumber = $stringParts[0]; // this will be 11
I'd rather be explicit:
<?php
$url = 'https://forums.mydomain.com/index.php?/clubs/11-Default-Club';
$query = parse_url($url, PHP_URL_QUERY);
$pattern = '#^/clubs/(\d+)[a-zA-Z-]+$#';
$digits = preg_match($pattern, $query, $matches)
? $matches[1]
: null;
var_dump($digits);
Output:
string(2) "11"
If this URL structure is fix for all URLs in your site and you only want to get the integer/number/digit part of the URL:
<?php
$url = 'https://forums.mydomain.com/index.php?/clubs/11-Default-Club';
$int = (int) filter_var($url, FILTER_SANITIZE_NUMBER_INT);
echo $int;
If this url structure is fix for all URLs in your site then below is best way to get your value.
<?php
$url = "https://forums.mydomain.com/index.php?/clubs/11-Default-Club";
$url = explode('/', $url);
$url = array_filter($url);
$end = end($url);
$end_parts = explode('-',$end);
echo $end_parts[0];
Output:
11
I have a problem to resolve. The first url allow me to display information or not on the website. It work fine.
I identify Account&Edit for example and make action.
http://localhost/boutique/index.php?Account&Edit
$_SERVER['QUERY_STRING'] = Account&Edit
If I rewrite the url, the system does not work and Account&Edit become Account/Edit
http://localhost/boutique/index.php/Account/Edit
$_SERVER['QUERY_STRING'] = '';
How to resolve this element when this element Account&Edit change ?
$_SERVER['QUERY_STRING'] is empty is this case.
Thank you.
I make that to solve the problem.
public function getUrlwithoutSEFU() {
if (empty($_SERVER['QUERY_STRING'])) {
$url = $_SERVER['REQUEST_URI'];
$replace = str_replace('index.php', '', $url);
$replace = str_replace(CLICSHOPPING::getConfig('http_path'), '', $replace);
$replace = substr($replace, 1);
$replace = str_replace('/', '&', $replace);
$url_string = $replace;
} else {
$url_string = $_SERVER['QUERY_STRING'];
}
return $url_string;
}
Take a look at RFC3875: The Common Gateway Interface (CGI) Version 1.1
When you have no ? i nthe request URL, then there's no query string.
Looking at REQUEST_URI would make sense.
This is how request urls are split into environment vars:
# QUERY_STRING
# ↓↓↓↓↓↓↓↓↓↓↓↓
http://localhost/boutique/index.php?Account&Edit
Or the part after the (directly invoked) php script. (This may vary depending on SAPI or be impacted by rewrite rules).
# PATH_INFO
# ↓↓↓↓↓↓↓↓↓↓↓↓↓
http://localhost/boutique/index.php/Account/Edit
Or the full path:
# REQUEST_URI
# ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
http://localhost/boutique/index.php/Account/Edit
Notably you would have to split it up yourself then. Also may show up as REDIRECT_REQUEST_URI for example in the $_SERVER array with some setups.
Solution
public function getUrlwithoutSEFU() {
if (empty($_SERVER['QUERY_STRING'])) {
$url = $_SERVER['REQUEST_URI'];
$replace = str_replace('index.php', '', $url);
$replace = str_replace(CLICSHOPPING::getConfig('http_path'), '', $replace);
$replace = substr($replace, 1);
$replace = str_replace('/', '&', $replace);
$url_string = $replace;
} else {
$url_string = $_SERVER['QUERY_STRING'];
}
return $url_string;
}
I need to get Android package name from the URL address.
Here is what I have done.
$url = 'https://play.google.com/store/apps/details?id=com.gamevil.projectn.global&feature=featured-apps#?t=W251bGwsMSwyLDIwMywiY29tLmdhbWV2aWwucHJvamVjdG4uZ2xvYmFsIl0.';
preg_match("~id=(\d+)~", $url, $matches);
$package_name = $matches[1];
echo $package_name;
Package name should be "com.gamevil.projectn.global"
However, my code is not working.
Is there something that I miss?
you can do this by parse_url function
<?php
$url = 'https://play.google.com/store/apps/details?id=com.gamevil.projectn.global&feature=featured-apps#?t=W251bGwsMSwyLDIwMywiY29tLmdhbWV2aWwucHJvamVjdG4uZ2xvYmFsIl0.';
$arr =parse_url($url);
$new = explode("&",$arr['query']);
$new1 = explode("=",$new[0]);
echo($new1[1] );
output
com.gamevil.projectn.global
Maybe this can help you:
$url = 'https://play.google.com/store/apps/details?id=com.gamevil.projectn.global&feature=featured-apps#?t=W251bGwsMSwyLDIwMywiY29tLmdhbWV2aWwucHJvamVjdG4uZ2xvYmFsIl0.';
preg_match("/id=(.*?)&/", $url, $matches);
$package_name = $matches[1];
echo $package_name;
preg_match will no find everything between id= and &.
But a better solution is to use parse_url to parse the url and this function will return the components of the url.
I'm trying to create an email template and replace words in the document using preg_replace. I'm pretty new to php so I'm not too clear about the logistics of it. This is what I currently have-- I want it to read the HTML/CSS file then replace words where I have placeholders.
<?php
$email = file("email.html");
$patterns = array();
$patterns[0] = '/header/';
$patterns[1] = '/name/';
$patterns[2] = '/body/';
$replacements = array();
$replacements[0] = 'imageurl';
$replacements[1] = 'John Johnson';
$replacements[2] = 'Content';
$output = preg_replace($patterns, $replacements, $email);
echo $output;
?>
Also, is it possible for me to replace with an image using this code?
you can simply use
$output = str_replace($patterns, $replacements, $email);
I am struggling to finish this regex code in PHP. I want to trim down the following url which is held in variable $text so that it goes from:
http://www.site.net/showthread.php?tid=324&pid=...
to:
showthread.php?tid=324
Thank you kindly!
Why use a regex? The parse_url method should give you all you want: http://php.net/manual/en/function.parse-url.php
Edit: working example
$someurl = 'http://www.site.net/showthread.php?tid=324&pid=...';
$urlParts = parse_url($someurl, PHP_URL_PATH | PHP_URL_QUERY);
$params = parse_str($urlParts['query']);
unset($params['pid']);
$queryString = http_build_query($params);
$newUrl = $urlParts['path'] . '?' . $queryString;
Since $urlParts['path'] start with a / and you didn't want that, you could even use
$newUrl = substr($newUrl, 1);
and be done :) Does that help at all?
This should do it:
$url = 'http://www.site.net/showthread.php?tid=324&pid=...';
$pattern = "/showthread.php\?tid=[0-9]+/";
if (preg_match($pattern, $url, $match))
print_r($match);