0

我有一个维基百科网址说(某些语言但不是英语),

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

我想将此网址转换为英文 wiki 网址,即。

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 回答