如何在PHP中将其他语言的维基百科网址转换为英语?

时间:2012-12-27 17:09:07

标签: php string preg-replace preg-match

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

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

我想将此网址转换为英文维基网址,即

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

但是我想知道这样做最有效的方法是什么?

我尝试在字符串中搜索".wikipedia",并用en替换之前的2个字符。

但是如果输入很简单,

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

如何处理所有案件?

希望我对我的问题很清楚。任何帮助将不胜感激。

3 个答案:

答案 0 :(得分: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;

然而,仅更改区域设置的问题在于,您将获得大量缺少的页面。重要的slu is是最后一个,大多数语言都不同:

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

所有这些页面都是关于“互联网”的,但只需更改区域设置就无法访问它们。

答案 1 :(得分: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];
?>

答案 2 :(得分:1)

页面名称可能因语言而异,因此您不能简单地猜测网址。

适用于所有页面的唯一方法是解析维基百科页面以查找“其他语言”链接的href值:

<li class="interwiki-en"><a href="__url__" title="__title__" hreflang="en" lang="en">English</a></li>