我试图创建一个脚本来ping我的Minecraft服务器,以检查有多少玩家在线,但由于某种原因,问号正在显示,并且它使整个网站看起来像废话。这是我的PHP文件。JavaScript中的奇怪问号
<script>
function setOnline(online,max) {
var on = online;
var mx = max;
var main = document.getElementById('status_main');
main.className = "panel panel-success server-status";
var title = document.getElementById('status_title');
title.innerHTML = "Online";
var body = document.getElementById('status_body');
body.innerHTML = on + "/" + mx + " Players Online";
}
</script>
<script>
function setOffline() {
var bar = document.getElementById('status');
bar.className = "panel panel-danger server-status";
bar.text = "Offline";
}
</script>
<?php
$host = "localhost"; //IP/host of Minecraft server
$port = 25565; //Minecraft server port, not query port
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); //Create the socket
$connected = socket_connect($socket, $host, $port); //Try and connect using the info provided above
if (!$connected)
die(); //No connection could be established
socket_send($socket, "\xFE\x01", 2, 0); //Send the server list ping request (two bytes)
$retVal = socket_recv($socket, &$data, 1024, 0); //Get the info and store it in $data
socket_close($socket); //Close socket
if ($retVal != false && substr($data, 0, 1) == "\xFF") //Ensure we're getting a kick message as expected
{
$data = substr($data, 9); //Remove packet, length and starting characters
$data = explode("\x00\x00", $data); //0000 separated info
$protocolVersion = $data[0]; //Get it all into separate variables
$serverVersion = $data[1];
$motd = $data[2];
$playersOnline = $data[3];
$playersMax = $data[4];
echo ("<script>setOnline('$playersOnline','$playersMax');</script>");
}
else
{
die();
}
?>
下面是结果看起来,当它被称为像: http://cl.ly/image/3o2f3P121q0m
我怎样才能摆脱问号?
我想你没有正确清理字符串。它似乎仍然包含元数据,或者您没有提取正确的数据。您可以摆脱问题标记提取正确的数据。 –
你可以给每个角色在$ playersOnline和$ playersMax的字符代码和你期望的值吗? – NickSlash
你说的是“0000分开的信息”,但你的'explode'中只有两个“nul”字符。 –