• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

umlaute und nicht erreichbarkeit

Space Vampire

Senior HTML'ler
mahlzeit
ich schon wieder.
wir haben auf unserer radio-page (ich bin nicht der webmaster und werd den teufel tun und mich dafür anbieten *lol*) ein kleines problem mit umlauten.

was die ganze page betrifft überlasse ich das auch dem webmaster sich irgendwann mal drum zu kümmern wenn es ihm endlich mal genehm ist :|

aber ich glaube, dass man das bei den streamstats auch mittels php angehen kann.
ich häte gerne, falls möglich, dass von schautcast ausgelesene titel automatisch gecleaned werden, und zwar so, dass aus "ä" ein "ae" und so weiter wird.

für die stream stats und das titelupdate in der streambox benutze ich dieses script.
kann mir da jemand weiterhelfen?

PHP:
<?php
include("shoutcast.class.php");
 
function ConvertSeconds($seconds) {
    $tmpseconds = substr("00".$seconds % 60, -2);
    if ($seconds > 59) {
        if ($seconds > 3599) {
            $tmphours = substr("0".intval($seconds / 3600), -2);
            $tmpminutes = substr("0".intval($seconds / 60 - (60 * $tmphours)), -2);
 
            return ($tmphours.":".$tmpminutes.":".$tmpseconds);
        } else {
            return ("00:".substr("0".intval($seconds / 60), -2).":".$tmpseconds);
        }
    } else {
        return ("00:00:".$tmpseconds);
    }
}
 
$shoutcast = new ShoutCast();
$shoutcast->host = "+++++";
$shoutcast->port = "+++++";
$shoutcast->passwd = "++++++";
 
if ($shoutcast->openstats()) {
    // We got the XML, gogogo!..
    if ($shoutcast->GetStreamStatus()) {
 
 
        echo "<b>Titel: </b><br>".$shoutcast->GetCurrentSongTitle()."\n";
 
        echo "<br><br><b>Moderator: </b><br>".$shoutcast->GetAIM()."\n";
 
 
 
    } else {
        echo "<img src='offline.gif'>";
    }
} else {
    // Ohhh, damnit..
    echo $shoutcast->geterror();
}
?>

weniger dringlich aber auch noch interessant wäre ein kleiner zusätzlicher sicherheitsanker in der ausgabe, falls der server nicht nur offline geschaltet, sondern unnerreichbar ist.
in dem fall soll nämlich nach möglichkeit ebenfalls dei "offline"-grafik angezeigt werden statt des fehlercodes.

danke im voraus... :smile:

ganz vergessen.
falls notwendig, hier die dazugehörige classes.php

PHP:
class ShoutCast {
    // Public
    var $host;
    var $port;
    var $passwd;
 
    //Private
    var $_xml;
    var $_error;
 
    function openstats() {
        $fp = fsockopen($this->host, $this->port, $errno, $errstr, 3);
        If (!$fp) {
            $this->_error = "<img src='offline.gif'>";
            return(0);
        } else {
            fputs($fp, "GET /admin.cgi?pass=".$this->passwd."&mode=viewxml HTTP/1.0\r\n");
            fputs($fp, "User-Agent: Mozilla\r\n\r\n");
            while (!feof($fp)) {
                    $this->_xml .= fgets($fp, 512);
            }
            fclose($fp);
 
            if (stristr($this->_xml, "HTTP/1.0 200 OK") == true) {
                // <-H> Thanks to Blaster for this fix.. trim();
                $this->_xml = trim(substr($this->_xml, 42));
            } else {
                $this->_error = "Bad login";
                return(0);
            }
 
            $xmlparser = xml_parser_create();
            if (!xml_parse_into_struct($xmlparser, $this->_xml, $this->_values, $this->_indexes)) {
                $this->_error = "Unparsable XML";
                return(0);
            }
 
            xml_parser_free($xmlparser);
 
            return(1);
        }
    }
 
    function GetCurrentListenersCount() {
        return($this->_values[$this->_indexes["CURRENTLISTENERS"][0]]["value"]);
    }
 
    function GetPeakListenersCount() {
        return($this->_values[$this->_indexes["PEAKLISTENERS"][0]]["value"]);
    }
 
    function GetMaxListenersCount() {
        return($this->_values[$this->_indexes["MAXLISTENERS"][0]]["value"]);
    }
 
    function GetReportedListenersCount() {
        return($this->_values[$this->_indexes["REPORTEDLISTENERS"][0]]["value"]);
    }
 
    function GetAverageListenTime() {
        return($this->_values[$this->_indexes["AVERAGETIME"][0]]["value"]);
    }
 
    function GetServerGenre() {
        return($this->_values[$this->_indexes["SERVERGENRE"][0]]["value"]);
    }
 
    function GetServerURL() {
        return($this->_values[$this->_indexes["SERVERURL"][0]]["value"]);
    }
 
    function GetServerTitle() {
        return($this->_values[$this->_indexes["SERVERTITLE"][0]]["value"]);
    }
 
    function GetCurrentSongTitle() {
        return($this->_values[$this->_indexes["SONGTITLE"][0]]["value"]);
    }
 
    function GetIRC() {
        return($this->_values[$this->_indexes["IRC"][0]]["value"]);
    }
 
    function GetAIM() {
        return($this->_values[$this->_indexes["AIM"][0]]["value"]);
    }
 
    function GetICQ() {
        return($this->_values[$this->_indexes["ICQ"][0]]["value"]);
    }
 
    function GetWebHitsCount() {
        return($this->_values[$this->_indexes["WEBHITS"][0]]["value"]);
    }
 
    function GetStreamHitsCount() {
        return($this->_values[$this->_indexes["STREAMHITS"][0]]["value"]);
    }
 
    function GetStreamStatus() {
        return($this->_values[$this->_indexes["STREAMSTATUS"][0]]["value"]);
    }
 
    function GetBitRate() {
        return($this->_values[$this->_indexes["BITRATE"][0]]["value"]);
    }
 
    function GetSongHistory() {
        for($i=1;$i<sizeof($this->_indexes['TITLE']);$i++) {
            $arrhistory[$i-1] = array(
                                    "playedat"=>$this->_values[$this->_indexes['PLAYEDAT'][$i]]['value'],
                                    "title"=>$this->_values[$this->_indexes['TITLE'][$i]]['value']
                                );
        }
 
        return($arrhistory);
    }
 
    function GetListeners() {
        for($i=0;$i<sizeof($this->_indexes['USERAGENT']);$i++) {
            $arrlisteners[$i] = array(
                                    "hostname"=>$this->_values[$this->_indexes['HOSTNAME'][$i]]['value'],
                                    "useragent"=>$this->_values[$this->_indexes['USERAGENT'][$i]]['value'],
                                    "underruns"=>$this->_values[$this->_indexes['UNDERRUNS'][$i]]['value'],
                                    "connecttime"=>$this->_values[$this->_indexes['CONNECTTIME'][$i]]['value'],
                                    "pointer"=>$this->_values[$this->_indexes['POINTER'][$i]]['value'],
                                    "uid"=>$this->_values[$this->_indexes['UID'][$i]]['value'],
                                );
        }
 
        return($arrlisteners);
    }
 
    function geterror() { return($this->_error); }
}
 
?>

ok ich hab einen lösungsansatz.
mit str_replace hab ich folgendes funktionierend versucht

PHP:
        echo "<font class='title'><b><hr>Zuletzt gespielte Titel:<hr></b></font>\n";
        $history = $shoutcast->GetSongHistory();
        if (is_array($history)) {
            for ($i=0;$i<sizeof($history);$i++) {
                echo "<font class='normalfont'>",$history[$i]["title"] =
                str_replace("Ü", "UE", $history[$i]["title"]).
                "</font><br>\n";
aber wie kann ich im selben befehl mehrere umlaute unterbringen?
wenn ich den selben befehl mehrfach untereinanderschaufele bekomme ich auch mehrfache ausgaben und funktioniert auch nicht.
das lässt sich doch bestimmt als ein einziger befehl verschachteln oder?
 
Zuletzt bearbeitet von einem Moderator:
Du kannst str_replace Arrays als Parameter übergeben (ich nehme an, dass du das meinst). Dazu findest du sicher auch ein Beispiel im Handbuch!

Gruß
 
ehrlich...ich hab keinen blassen schimmer!
alles was ich an php zusammenschustere ist aus mehreren scriptfetzen zusammengetragen.
wäre es viel arbeit mir das anhand meines scriptes da oben mit zwei umlauten oder sonderzeichen zu demonstrieren damit ich mir das nur noch erweitern muss?
da wär ich übelst dankbar für :(

EDIT:
nur damit keiner meint ich würd nur fragen und nichts versuchen.
ich hab zwar kein handbuch, aber ich hab so das eine oder andere beispiel online gefunden.
ließ sich aber leider nicht auf mein script da oben anwenden.
dan einzige was dann am ende rauskam war das wor "Arrey".
ich versteh einfach zu wenig davon *seufz*
 
Für Details zu Funktionen in PHP oder um die Reihenfolge der Parameter nachzusehen, kannst du auf php.net/FUNKTIONSNAME gehen.

Um die Umlaute zu entfernen, könntest du also folgendes nehmen. Das Script entfernt auch gleich mit das "ß".

PHP:
$uml = array("ä", "ö", "ü", "Ä", "Ö", "Ü", "ß");
$ohne_uml = array("ae", "oe", "ue", "Ae", "Oe", "Ue", "ss");

$dein_text = str_replace($uml, $ohne_uml, $dein_text);
 
super danke :)
das hat geholfen.
war zwar ne unglaubliche strickerei dass funktionierend in den bestehenden code einzuflächten...aber es hat hingehauen :D
vielen dank dafür
 
danke für den hinweis Asipak4you
hab da auch gleich mal wegen meinem nächsten problem in der gleichen angelegenheit gestöbert aber hab das passende nicht gefunden *seufz*

kann man den ausgabetext noch dahingehend behandeln lassen, dass der automatisch in "erster buchstabe jedes wortes groß, rest klein" umgewandelt wird?

im moment sieht das bei mir so aus:

PHP:
        echo "<font class='medfont'><tr><td><b>Aktueller Titel: </b></td></font>";
        $aktuellertitel = $shoutcast->GetCurrentSongTitle();
        $uml = array("ä", "ö", "ü", "Ä", "Ö", "Ü", "ß", "´");
        $ohne_uml = array("ae", "oe", "ue", "Ae", "Oe", "Ue", "ss", "'");
        echo "<font class='normalfont'><td>".
        $aktuellertitel = str_replace($uml, $ohne_uml, $aktuellertitel)
        ."</font></td></tr></p>\n";
 
auch das hat geholfen...musste zwar ordentlich die grauen zellen anstrengen um das umzusetzen, aber ich staune richtig über mich selber, wieviel ich inzwischen verstehe ohne wirklich ahnung davon zu haben *lol*
 
Zurück
Oben