0

私はウィキペディアのURLを持っています(いくつかの言語ですが英語ではありません)、

http://ru.wikipedia.org/wiki/Liz_Claiborne,_Inc

このURLを英語のwikiURLに変換したいと思います。

http://en.wikipedia.org/wiki/Liz_Claiborne,_Inc

しかし、私はこれを行うための最も効果的な方法は何ですか?

文字列を検索".wikipedia"して、前の2文字を。に置き換えましたen

しかし、入力が単純​​な場合はどうなりますか?

http://wikipedia.org/wiki/Liz_Claiborne,_Inc

すべてのケースを処理する方法は?

私の質問がはっきりしていることを願っています。どんな助けでもいただければ幸いです。

4

3 に答える 3

2

これにより、既存のロケールが変更されるか、欠落している場合はロケールが追加されます。

$urls = array(
    'http://wikipedia.org',
    'http://ru.wikipedia.org',
    'http://en.wikipedia.org',
);
$regex  = '/(?<=^http:\/\/|^https:\/\/)(?:[a-z]{2}\.|\b)(?=wikipedia.org)/i';
$change = 'de';
echo '<pre>';
foreach ($urls as $url)
    echo preg_replace($regex, "$change.", $url), "\n";
die;

ただし、ロケールを変更するだけの問題は、多くのページが欠落することです。重要なスラッグは最後のものであり、ほとんどの言語で異なります。

http://en.wikipedia.org/wiki/Internet
http://fo.wikipedia.org/wiki/Alnet
http://gv.wikipedia.org/wiki/Eddyr-voggyl

これらのページはすべて「インターネット」に関するものですが、ロケールを変更するだけではアクセスできません。

于 2012-12-27T17:27:54.277 に答える
1

正規表現を使用して、探している部分文字列を取得します。簡単な実例:

<?php
$regex = '@http\://.*(wikipedia\.org/.+)@';
$url = 'http://ru.wikipedia.org/wiki/Liz_Claiborne,_Inc';
preg_match($regex, $url, $matches);
echo 'http://en.'.$matches[1];
?>
于 2012-12-27T17:21:43.330 に答える
1

ページの名前は言語によって異なる可能性があるため、URLを簡単に推測することはできません。

すべてのページで機能する唯一の方法は、ウィキペディアのページを解析しhrefて「その他の言語」リンクの値を見つけることです。

<li class="interwiki-en"><a href="__url__" title="__title__" hreflang="en" lang="en">English</a></li>
于 2012-12-27T17:24:14.723 に答える