我将首先解释我希望代码执行的操作。
代码应该通过使用api显示游戏中玩家的数据 由游戏本身提供(http://services.runescape.com/m=hiscore/index_lite.ws?player=NameOfPlayer)。在我的网站上,每个玩家都有自己的页面,页面的标题是玩家的名字。因此,我想获取页面标题,以便在其下显示播放器的数据。
(代码的其他部分完全正常工作。如果我删除$ title行并将$ url更改为其工作的播放器之一。)
我无法使用下面的代码。
当我将此代码插入页面时,页面中断。但是,如果我删除$title = alert(document.title);');
行,页面就不会中断。
我在线进行了一些研究并在stackoverflow上进行了一些研究,我尝试在str_get_html('<title></title>');
中更改该行,但它没有帮助。
<?php
$title = str_get_html('<title></title>');
$url = "http://services.runescape.com/m=hiscore/index_lite.ws?player=$title";
$f = file_get_contents($url);
$items = explode(' ', $f);
foreach($items as $item){
$player = explode(",", $item);
echo "Total Level: $player[1]<br />";
echo "Attack: $player[3]<br />";
echo "Defence: $player[5]<br />";
echo "Strength: $player[7]<br />";
echo "Constitution: $player[9]<br />";
echo "Ranged: $player[11]<br />";
echo "Prayer: $player[13]<br />";
echo "Magic: $player[15]<br />";
echo "Cooking: $player[17]<br />";
echo "Woodcutting: $player[19]<br />";
echo "Fletching: $player[21]<br />";
echo "Fishing: $player[23]<br />";
echo "Firemaking: $player[25]<br />";
echo "Crafting: $player[27]<br />";
echo "Smithing: $player[29]<br />";
echo "Mining: $player[31]<br />";
echo "Herblore: $player[33]<br />";
echo "Agility: $player[35]<br />";
echo "Thieving: $player[37]<br />";
echo "Slayer: $player[39]<br />";
echo "Farming: $player[41]<br />";
echo "Runecrafting: $player[43]<br />";
echo "Hunter: $player[45]<br />";
echo "Construction: $player[47]<br />";
echo "Summoning: $player[49]<br />";
echo "Dungeoneering: $player[51]<br />";
echo "Divination: $player[53]<br />";
echo "Invention: $player[55]<br />";
}
?>
我也在想,有可能以另一种方式获取数据,但我不知道如何做到这一点。 该网站在WordPress上运行,每个播放器页面都连接到注册用户的WordPress帐户。 可以使用以下参考来获取用户的数据:
get_userdata( $userid );
每个用户的播放器名称都存储为&#34;昵称&#34;。因此,可以使用以下方法获取每个用户的玩家名称:
<?php $user_info = get_userdata(1);
echo $user_info->nickname;
?>
但是,用户页面是由插件生成的。我试图调整其中的代码,但我无法成功地完成它。
你知道如何在不破坏页面标题的情况下获取页面标题,或者获取用户的昵称吗?
我现在将页面设置为:example.com/user/playername
(只有播放器名称发生变化)。
我现在正在使用:
global $post;
$pagename = $post->post_name;
但是,$ pagename显示为user
而不是playername
。你知道我怎么能做到这一点&#34;得到&#34; playername
而不是它的slug?
编辑2:
function getPath($url)
{
$path = parse_url($url,PHP_URL_PATH);
$lastSlash = strrpos($path,"/");
return substr($path,1,$lastSlash-1);
}
答案 0 :(得分:2)
您可以尝试使用此函数解析$ url返回的HTML
<?php
function page_title($url) {
$fp = file_get_contents($url);
if (!$fp)
return null;
$res = preg_match("/<title>(.*)<\/title>/siU", $fp, $title_matches);
if (!$res)
return null;
// Clean up title: remove EOL's and excessive whitespace.
$title = preg_replace('/\s+/', ' ', $title_matches[1]);
$title = trim($title);
return $title;
}
?>
您可以在this answer中找到更多详情。
由于您希望从自己的网址中找到播放器名称,因此可以使用get_permalink()。
然后您需要从https://example.com/user/eibe/
等网址中提取玩家名称。
为此,您可以使用以下代码:
<?php
$permalink = get_permalink(); // $permalink is now 'https://example.com/user/eibe/'
$permalink = trim($permalink, "/"); // $permalink is now 'https://example.com/user/eibe'
$player_name = substr($permalink, strrpos($permalink, '/') + 1); // $player_name is now 'eibe'
?>
希望这有帮助。