2010-12-14 30 views
0

私はURL上の特定のページを置き換える小さなホッケープロジェクトに取り組んでいます。私に説明してみましょう:PHP:URL文字列の一部のみを変更しますか?

を私が持っているURL http://www.mydomain.com/article/paragraph/low/

私は/低最後のセグメントをURLを保つが、交換したいです/高/と/ので、新しいURLは次のとおりです。

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

私は別の爆発、分割およびスプライスを試してみましたしかし、私はちょうどそれの周りに私の頭をラップし、それを動作させるように見えることはできません。最後のセグメントだけでなく、URL全体を変更して新しい変数に保存することができます。
私はそれがかなりストレートなケースであると確信していますが、私はかなり多くの配列/ PHPの文字列操作でそれほど働いたことはないので、私はかなり失われています。

私は最初にURLを分割して "\"を使って分割しなければならないと思います(私はそれを試みましたが、explode( "\"、$ string)を使用して問題があります) \ low \ with \ high \

誰かがこれを行うためにどのような方法を使用するのか正しい方向に助けてくれることを願ってください。

誠実
Mestika

+0

これらのバックスラッシュはすべて「 '/'」で始まります。ちょっと入れ替えることはできません。 –

+1

@Gordon重複していません。それとも少なくともその質問ではない。 –

+0

@Alin correct。私はparse_strとparse_urlを混同しました。 – Gordon

答えて

3

あなたは\を/としました。

$url = explode('/', rtrim($url, '/')); 
if (end($url) == 'low') { 
    $url[count($url)-1] = 'high'; 
} 
$url = implode('/', $url) .'/'; 
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を置き換え、その後には/を付けることはできません。

+0

最初のスニペットは、最後の部分だけでなく、URLの任意の位置で "/ low /"を置き換えます。 – rik

+0

@rik私は知っています。彼がそれを望まないなら、私は別の方法を追加しました。 –

3

どのようにstr_replace?

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

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

編集; Rikが正しいです。あなたのドメイン(またはそのURLの他の部分)に "low"という文字列が含まれていると、あなたのリンクが崩れてしまいます。 URLに複数の「低」が含まれている場合は、スクリプトに余分なインジケータを追加する必要があります。その例は、/をあなたのstr_replaceに含めることです。

+0

不正確です。ユーザーのドメインがloweredexpectations.comの場合はどうなりますか? – rik

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) 
+1

@using 'split'"この機能はPHP 5.3.0以降では廃止されていますが、この機能を利用することはお勧めできません。 –

+0

ありがとうAlin私は+ phpunitが私に警告を表示していないことを知らなかった。情報をありがとう。スニペットを更新しました。 – Alfred

1

使用parse_urlは、その成分にURLを分割し、必要に応じて(ここではあなたがそのセグメントにパスを分割するexplodeを使用することができます)それらを変更して、URLを再構築しますとなります。

+0

私は 'parse_url'を使って彼の問題を単純化するとは思わない。それはすでに非常に単純な問題ですが、彼はそれに近づく方法を知らないだけです。 –

+2

@Acl Purcaru:単純化についてではなく、正しさについてです。 – Gumbo

+0

彼は 'explose'アプローチを使いたい場合、' parse_url'を使うのはちょっと意味があると思います。私は、置き換えの解決策を思いついていたので、URLを何らかの方法で変更することは役に立たないでしょう。 –

関連する問題