JavaScript中奇怪的问号

JavaScript中奇怪的问号,javascript,php,minecraft,Javascript,Php,Minecraft,我正试图创建一个脚本,ping我的Minecraft服务器,以检查有多少玩家在线,但由于某些原因,会显示问号,这使整个网站看起来像垃圾。这是我的PHP文件 <script> function setOnline(online,max) { var on = online; var mx = max; var main = document.getElementById('status_main'); main.

我正试图创建一个脚本,ping我的Minecraft服务器,以检查有多少玩家在线,但由于某些原因,会显示问号,这使整个网站看起来像垃圾。这是我的PHP文件

<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();
}
?>

功能设置在线(在线,最大){
var on=在线;
var mx=最大值;
var main=document.getElementById('status_main');
main.className=“面板成功服务器状态”;
var title=document.getElementById('status_title');
title.innerHTML=“在线”;
var body=document.getElementById('status_body');
body.innerHTML=on+“/”+mx+“玩家在线”;
}
函数setOffline(){
var bar=document.getElementById('status');
bar.className=“面板面板危险服务器状态”;
bar.text=“脱机”;
}

这可能是一个字符集问题。信息没有以编码的方式呈现

您可以
var\u dump
$data查看其内容类型


这里只是一个假设:实际编码是ISO-8859-1,但它被解释为UTF-8(或UTF-16)

要使浏览器使用正确的编码,可以添加HTTP标头:

header("Content-Type: text/plain; charset=ISO-8859-1");

或者使用元标记。

我猜您没有正确清理字符串。它似乎仍然包含元数据,或者您没有提取正确的数据。在提取正确的数据时,您可以排除这些问题。您能给出$PlayerOnline和$PlayerMax中每个字符的字符代码以及您期望的值吗?您说的是“0000分隔信息”,但在
分解中只有两个“nul”字符。使用$PlayerOnline=var_dump(数据[3]);只是在我的网站的左下角添加了'string(2)“9'。如果我没有得到基本的概念,很抱歉,我对这个相当陌生。感谢您耐心地对待我=)@josephmandex var_转储整个$data,而不仅仅是$data[3]。它应该类似于HTTP/1.1200OK日期:2009年9月14日星期一08:56:36GMT服务器:Apache/2.2.3(红帽)上次修改:2005年11月15日星期二13:24:10GMT ETag:“b80f4-1b6-80bfd280”接受范围:字节内容长度:438连接:关闭内容类型:text/html;charset=UTF-8
我在这里添加了它:$data=explode(“\x00\x00”,$data);var_dump($数据)$protocolVersion=$data[0];但它只是将一些随机数据打印到我的网站@josephmandex的底部。我在你的网站底部什么也看不到。