PHP:只更改URL字符串的一部分?

时间:2010-12-14 15:47:06

标签: php string url explode

我正在开发一个小型的hoppy项目,我希望在该项目中替换URL上的特定页面。让我解释一下:

我有网址 http://www.mydomain.com/article/paragraph/low/

我想保留网址,但用 / high / 替换最后一段 / low / ,以便新网址为:

http://www.mydomain.com/article/paragraph/high/

我尝试过不同的爆炸,分裂和拼接,但我似乎无法绕过它并让它发挥作用。我可以更改整个网址,但不仅仅是最后一个网段,并将其保存在新变量中 我非常有信心这是一个相当直接的案例,但我从来没有在PHP中使用数组/字符串操作那么多,所以我很丢失。

我想我必须首先将URL拆分成段,使用“\”分隔它(我试过但是通过使用explode(“\”,$ string)来解决问题)然后替换掉最后的\低\用\高\

希望有人可以帮助或指出我使用哪种方法来做正确的方向。


Mestika

5 个答案:

答案 0 :(得分:3)

你为/.

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

答案 1 :(得分:3)

str_replace怎么样?

<?php
$newurl = str_replace('low', 'high', $oldurl);
?>

文件; http://php.net/manual/en/function.str-replace.php

编辑; Rik是对的;如果您的域名(或该网址的任何其他部分)包含字符串“low”,这将搞乱您的链接。 所以:如果你的网址可能包含多个“低”,你必须在脚本中添加一个额外的指标。一个例子就是在str_replace中包含/。

答案 2 :(得分: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)

答案 3 :(得分:1)

使用parse_url将URL拆分为其组件,根据需要进行修改(此处可以使用explode将路径拆分为其段),然后使用{{3}重建URL }。

答案 4 :(得分: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段,并且只有后面跟/。正则表达式方法只有在它是最后一个段时才会替换low,并且后面可能没有/