3

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

我有网址

http://www.example.com/article/paragraph/low/

我想保留 URL,但将最后一段替换/low//high/新的 URL:

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

我尝试了不同的爆炸、拆分和拼接,但我似乎无法将我的头绕在它周围并让它工作。我可以更改整个 URL,而不仅仅是最后一段,并将其保存在一个新变量中。
我非常有信心这是一个非常简单的案例,但我从来没有在 PHP 中使用过数组/字符串操作这么多,所以我很迷茫。

我想我必须先将 URL 分成几段,使用“\”来分隔它(我尝试过,但使用时遇到问题explode("\", $string)),然后将最后一个替换\low\\high\

希望有人可以帮助或指出我正确的方向来使用什么方法来做到这一点。

真诚
的梅斯蒂卡

4

5 回答 5

4

str_replace 怎么样?

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

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

编辑; 里克是对的;如果您的域(或 URL 的任何其他部分)包含字符串“low”,这会弄乱您的链接。所以:如果你的 url 可能包含多个 'low' 's,你将不得不在脚本中添加一个额外的指标。一个例子是在你的 str_replace 中包含 /'s。

于 2010-12-14T15:52:22.403 回答
3

你把\换成了/。

$url = explode('/', rtrim($url, '/'));
if (end($url) == 'low') {
    $url[count($url)-1] = 'high';
}
$url = implode('/', $url) .'/';
于 2010-12-14T15:51:03.217 回答
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)
于 2010-12-14T15:55:25.373 回答
1

用于parse_url将 URL 拆分为其组件,根据需要对其进行修改(此处您可以使用explode将路径拆分为其段),然后使用http_build_url.

于 2010-12-14T15:55:36.993 回答
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仅在它是最后一段并且后面可能没有/.

于 2010-12-14T15:49:56.587 回答