letztes Zeichen eines Strings auslesen

supercat1510

Erfahrenes Mitglied
Ich möchte gerne das letzte Zeichen eines Strings auslesen lassen.

Mein Problem
Ich überprüfe mit fsockopen ob bestimmte Links erreichbar sind, auf localhost alles kein Problem, nur online auf meinem Server zeigt er mir bei allen Adressen mit / am Ende das er sie nich erreicht.

Jetzt bräuchte ich ne Möglichkeit dieses / am Ende (falls vorhanden) zu erkennen und zu löschen (löschen kann ich brauch nur wie mans erkennt).

Ich kanns nicht komplett entfernen (str_replace) oder spliten (explode), da teilweise auch Seiten in Unterordnern als Link vorhanden sind - diese würden dann nicht mehr funktionieren.
 
PHP:
while ($string[strlen($string)-1] === '/') {
    $string = substr($string, 0, -1);
}
// oder
$string = rtrim($string, '/');
 
Hi,

PHP:
$url = "http://some.url.com/";

if($url[ strlen($url) - 1 ] == '/' )
  $url[ strlen($url) - 1 ] = '';

echo $url;

Sollte funktionieren.
 
Wie "löscht" du denn das letzte Zeichen?
Das wird mit Sicherheit auch der Weg sein um es zu erkennen.
Du verwendest sicherlich substr. Dann kannst damit auch "löschen".
Hier mal beides:
PHP:
if (substr($str, -1) == "/")
{
  $str = substr($str, 0, strlen($str) - 2);
}

Edit:
Sollte funktionieren.
Ohne es zu testen, denke ich das man so nicht auf Strings schreiben kann. Das Lesen geht.
 
Zuletzt bearbeitet:
Ohne es zu testen, denke ich das man so nicht auf Strings schreiben kann. Das Lesen geht.

Naja, ok, es kommt ein undefiniertes Zeichen anstatt des Slash. OK, meine Lösung funktioniert nicht so dolle ;-) Grundsätzlich scheint es jedoch zu funktionieren. Nehme ich statt dem Leerstring einen gültigen Buchstaben bspw. "a", funktioniert das. Seltsam nicht?
 
Naja, ok, es kommt ein undefiniertes Zeichen anstatt des Slash. OK, meine Lösung funktioniert nicht so dolle ;-) Grundsätzlich scheint es jedoch zu funktionieren. Nehme ich statt dem Leerstring einen gültigen Buchstaben bspw. "a", funktioniert das. Seltsam nicht?

Habe darüber kurz nachdenken müssen und denke den Grund gefunden zu haben:
Es ist nachvollziehbar warum PHP das macht.

Ein String ist ein Array von Zeichen, so wie man es aus anderen Sprachen (Java, C, C++) etc. kennt. Von daher kann man über diesen Weg lesen und schreiben.

PHP:
$s = "Dies ist ein Text.";
$s[15] = "S";
echo $s;  // Ausgabe: Dies ist ein TeSt.

Ein "leeres Zeichen" macht folgendes:
PHP:
$s = "Dies ist ein Text.";
$s[15] = "";
// ist gleichbedeutent mit
$s [15] = chr(0);
// also ein vorhandenes Zeichen

Das kann jeder gern nachprüfen, hiermit:
PHP:
$s = "foo";
$s[0] = "";
$s[1] = chr(0);
echo ord($s[0]) . " = " . ord($s[1]);

Von daher geht deine Variante. Hatte ich mich geirrt. Aber wir beide wissen jetzt, dass das Zeichen nicht gelöscht wurde sondern durch ein anderes ersetzt.
 
Zuletzt bearbeitet:
Eine leere Zeichenkette und eine Zeichenkette nur bestehend aus dem Zeichen 0x00 ist nicht dasselbe!
PHP:
$str1 = "";
$str2 = chr(0);
var_dump($str1 === $str2);
 
Hab jetz mal das von Saftmeister modifiziert - das von Zodiac wollte nich richtig laufen.

Habs jetz so gelöst:
PHP:
if($addy[strlen($addy) - 1] == '/' ) {
  $addy[strlen($addy) - 1] = "*";
  }
  $addy = str_replace("*", "", $addy);

  $addy   = explode("?", str_replace("http://", "",$addy));

        if(@fsockopen ($addy[0], 80, $errno, $errstr, 30) != FALSE){
                echo $ok;
        }
        else {
                echo $wrong;
        }

Ich habs über den Umweg mit * gemacht, da er mir ohne das ein Fragezeichen in ner Raute gebracht hat.

Funktioniert jetz bei mir wie ichs wollte :)
 
Zurück