我正在做一个小的跳转项目,我想替换URL中的一个特定页面。让我解释一下。
我有一个URL
我想保留URL,但要把最后一段替换掉。/low/
与 /high/
所以新的网址是
我已经尝试了不同的爆炸,分割和拼接,但我似乎不能把我的头绕过它,并使其工作。我可以改变整个URL,但不能只改变最后一段,并将其保存在一个新的变量中。我很有信心这是一个很直接的例子,但是我从来没有在PHP中使用过那么多的数组字符串操作,所以我很迷茫。
我想我必须先将 URL 分割成段,用"\"来分隔它(我试过,但在使用 explode("\", $string))
然后替换最后一个 \low\
与 \high\
希望有人能帮我或指点我用什么方法来做这件事。
真诚的Mestika
你把 \ 。
$url = explode('/', rtrim($url, '/'));
if (end($url) == 'low') {
$url[count($url)-1] = 'high';
}
$url = implode('/', $url) .'/';
str_replace怎么样?
<?php
$newurl = str_replace('low', 'high', $oldurl);
?>
文档。http:/php.netmanualenfunction.str-replace.php
edit;Rik是正确的;如果你的域名(或任何其他部分的url)包括字符串 "low",这将会扰乱你的链接。所以:如果你的url可能包含多个'low''s,你将不得不在脚本中添加一个额外的指标。一个例子是在你的str_replace中包含's'。
使用 parse_url
将URL分割成不同的组件,并根据需要进行修改(这里你可以使用 explode
来分割路径),然后用 http_build_url
.
<?php
class TestURL extends PHPUnit_Framework_TestCase {
public function testURL() {
$URL = 'http://www.mydomain.com/article/paragraph/low/';
$explode = explode('/', $URL);
$explode[5] = 'high';
$expected = 'http://www.mydomain.com/article/paragraph/high/';
$actual = implode('/', $explode);
$this->assertEquals($expected, $actual);
}
}
--
phpunit simple-test.php
PHPUnit 3.4.13 by Sebastian Bergmann.
.
Time: 0 seconds, Memory: 4.75Mb
OK (1 test, 1 assertion)
这大概就够了。
$url = "http://www.mydomain.com/article/paragraph/low/";
$newUrl = str_replace('/low/', '/high/', $url);
或使用正则表达式(它允许更多的灵活性)。
$url = "http://www.mydomain.com/article/paragraph/low/";
$newUrl = preg_replace('/low(\/?)$/', 'high$1', $url);
请注意,字符串方法将取代任何 low
段,并且只有当它后面有一个 /
. regex方法将取代 low
只有当它是最后一段,并且它可能不在后面有一个...。/
.