3

URL 上の特定のページを置き換えたい小さなホッピー プロジェクトに取り組んでいます。説明させてください:

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' が含まれている可能性がある場合は、スクリプトに追加のインジケーターを追加する必要があります。その例は、str_replace に / を含めることです。

于 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、パスをセグメントに分割するために を使用できます)、URL を で再構築します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 に答える