从字符串中删除字符

时间:2012-08-14 01:16:05

标签: php wikipedia

我正在编写一个脚本,它从维基百科中获取数据。

一个常见问题是例如我想要获取:

北斯特拉德布鲁克岛

但是我们提取的字符串在下面,所以需要删除废话

[[North Stradbroke Island]]'

目前的刮擦代码是:

    $curl_handle=curl_init();
curl_setopt($curl_handle,CURLOPT_URL,"http://en.wikipedia.org/wiki/Special:Export/" . $wiki['suburb'] . ",_" . $wiki['state'] . "");
curl_setopt($curl_handle,CURLOPT_TIMEOUT,10);
curl_setopt($curl_handle,CURLOPT_USERAGENT,'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13');
curl_setopt($curl_handle,CURLOPT_CONNECTTIMEOUT,10);
curl_setopt($curl_handle,CURLOPT_RETURNTRANSFER,1);
$xml = curl_exec($curl_handle);
curl_close($curl_handle);

$x = simplexml_load_string($xml);
$text   = $x->page->revision->text;

$arr = explode("| ", $text);

$wikipedia = array();
foreach($arr as $s){
    $pair   = preg_split('/= /', $s);
    $key    = substr($pair[0],0,strpos($pair[0]," "));
    switch($key){
        case "lga":
        case "pop":
        case "dist1":
            $wikipedia[$key] = substr($pair[1],0,-1);
            break;
        case "near-nw":
        case "near-n":
        case "near-ne":
        case "near-w":
        case "near-e":
        case "near-sw":
        case "near-s":
        case "near-se":
            $value = $pair[1];
            if($value != ""){
                $value =substr($pair[1],2,strpos($pair[1],",")-2);
            }
            $wikipedia[$key] = $value;
            break;
    }
}

在我的页面上,我有:

    <?
    $wiki['suburb'] = str_replace(" ", "_", $r['suburb']);
    $wiki['state'] = convertStateWiki($r['state']);
    include("/path-to-wiki-file/wiki.suburb.php");
    if ($wikipedia != NULL){
?>

并回应结果:(示例)

<a href="reviews/<?=strtolower($r['state']);?>/<?=strtolower(str_replace(" ", "-", $wikipedia['near-nw']));?>/"><?=$wikipedia['near-nw'];?></a>

基本上:我们抓住使用wikis导出Feed,一个郊区。那个郊区可能已被输入维基百科,如:

[['某些郊区名称]']例如

我需要将以上内容返回为:某些郊区名称

我们需要删除所有非ALPHA字符,我不是100%使用php,所以如果这听起来很愚蠢,请随时说出来。但请不要投票,因为我提供了尽可能多的代码。

我只需要阻止返回的数据包含除Alpha字符之外的任何内容(必须允许空格)

3 个答案:

答案 0 :(得分:1)

Wiki Markup实际上已经有很好的记录。

但是,对于您的情况,一个简单的trim($str, "[]'")应该这样做:)

在你的情况下:

$wiki['suburb'] = str_replace(" ", "_", trim($r['suburb'], "[]'"));

答案 1 :(得分:1)

你走了:

<?php
$place = $wikipedia['near-nw'];
$place = trim($place, "[]'");
$href = str_replace(" ", "-", $place);
?>
<a href="reviews/<?=strtolower($r['state'] . "/" . $href);?>/"><?=$place;?></a>

答案 2 :(得分:-1)

“需要删除废话”,这个废话称为Wiki Markup,它是机器可读的。以下是解析器列表:http://www.mediawiki.org/wiki/Alternative_parsers

如果要删除所有非字母数字字符,那么最终会丢失大量信息。只需解析标记,然后以您喜欢的任何格式输出它。