PHP。只改变一个URL字符串的一部分?

问题描述 投票:3回答:5

我正在做一个小的跳转项目,我想替换URL中的一个特定页面。让我解释一下。

我有一个URL

http:/www.example.comarticleparagraphlow

我想保留URL,但要把最后一段替换掉。/low//high/ 所以新的网址是

http:/www.example.comarticleparagraphhigh

我已经尝试了不同的爆炸,分割和拼接,但我似乎不能把我的头绕过它,并使其工作。我可以改变整个URL,但不能只改变最后一段,并将其保存在一个新的变量中。我很有信心这是一个很直接的例子,但是我从来没有在PHP中使用过那么多的数组字符串操作,所以我很迷茫。

我想我必须先将 URL 分割成段,用"\"来分隔它(我试过,但在使用 explode("\", $string)) 然后替换最后一个 \low\\high\

希望有人能帮我或指点我用什么方法来做这件事。

真诚的Mestika

php string url explode
5个回答
3
投票

你把 \ 。

$url = explode('/', rtrim($url, '/'));
if (end($url) == 'low') {
    $url[count($url)-1] = 'high';
}
$url = implode('/', $url) .'/';

3
投票

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'。


1
投票

使用 parse_url 将URL分割成不同的组件,并根据需要进行修改(这里你可以使用 explode 来分割路径),然后用 http_build_url.


1
投票
<?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)

0
投票

这大概就够了。

$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 只有当它是最后一段,并且它可能不在后面有一个...。/.

© www.soinside.com 2019 - 2024. All rights reserved.