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

Frage zu PHP

Status
Für weitere Antworten geschlossen.

Gimli

Mitglied
Wenn ich jetzt in einer Variablen den String habe:
Hallo

Wie kann ich dann das zu diesem hier umwandeln:
H a l l o

Und wie kann ich bei folgendem String eine Belibige zeichenfolge (z.B. Hallo) in Fett drucken lassen:

Wie gehts denn so? Hallo!

Bitte um Hilfe!
 
Zuletzt bearbeitet:
es geht sicher so:
Code:
$var1 = Hallo;
ein wenig code(....)
$var1 = H a l l o;
also später im code einfach den wert der variablen ändern
die frage ist ob du es so machen kannst
also: was genau möchtest du machen?
und fett machen:
Code:
$var = Hallo;
echo "Das<b>".$var."</b>ist fett"
du kannst beliebig viel html code in ein echo schreiben
(natürlich müsstest du eigendlich einen span machen und dann diesen span im css beschrieben)
mfg
 
du kleiner html freak man macht text nicht mit einem B Tag fett sondern mit dem STRONG tag ^^

PHP:
<?php

function change($text, $b)
{
    $l = strlen($text);
    $a = array();
    
    for($i=0; $i<$l; $i++)
    {
        $a[] = $text{$i};
    }
    
    return implode($a, $b);
}

echo change('Hallo', ' ');

?>
 
@ Slibbo
Wäre wahrscheinlich auch kürzer gegangen: ;)
PHP:
function change($text, $b)
{
    $a = str_split($text,1);
    return implode($a, $b);
}
Und zu Gimlis zweitem Problem:
Ich würde hier preg_replace benutzen und evtl. eine Funktion, damit man nicht so viel schreiben muss. Hiermit kannst du auch mehrer Wörter gleichzeitig fett machen:
PHP:
function do_format($array) {
    // Übergebenes Array durchlaufen
    foreach($array as $v) {
        $r[] = "#($v)#i";
    }
    return $r;
}
// String mit fett zu schreibenden Wörtern
$str = "Wie gehts denn so? Hallo!";
// Fette Wörter
$worter = array("Hallo","Wie");
// Der RegExp Syntax anpassen
$worter = do_format($worter);
// Alle Wörter $worter im String $str fett ausgeben
echo preg_replace($worter,"<strong>$1</strong>",$str);
Habs jetzt sehr ausführlich geschrieben. Kann man noch kürzen.

Gruß
Voodoo
 
Voodoo hast zwar recht aber ich nehme gern noch Rücksicht auf PHP4 ^^
 
eigendlich macht man ja beides richtigerweise nicht.
man sollte richtigerweise nur den inhalt in html schreiben und das aussehen wird nur in css gemacht(ist auch praktischer).
@topic: ginge meins nicht? (das erste ist natürlich nicht unbedingt praktisch)
mfg
 
echo preg_replace($worter,"<strong>$1</strong>",$str);[/php]Habs jetzt sehr ausführlich geschrieben. Kann man noch kürzen.

Gruß
Voodoo

Als ich PHP gelernt habe, habe ich gelernt das keine Variable mit einer Zahl beginnen darf. Bei Voodoos beispiel heißt ja die eine Variable $1. Ich denke jetzt nciht das Voodoo ein Fehler gemacht hat, aber wieso schreibt man da $1? PHP: preg_replace - Manual Hab ich grad nachgelesen aber ich blicks erhlich gesagt nicht.
 
das darf man nicht weil PHP diese für sich reservieren will ;)
 
Also...
Die Funktion preg_replace benutzt sogenannte Reguläre Ausdrücke.
Die Syntax kann hierbei auch relativ komplex werden.
Der Suchpattern war bei der Funktion oben folgender:
Code:
#(wort)#i
# ist ein Begrenzer, der den eigentlichen Pattern von den Modifiern wie z.B i abtrennt.
Dieser Modifier besagt einfach, dass Groß- und Kleinschreibung keine Beachtung geschenkt werden soll.
In den Klammern steht der Ausdruck, der am Ende zur weiteren Verwendung gespeichert werden soll. In unserem Fall in $1. Enthielte der Pattern weitere Klammern, ginge auch die Nummerierung weiter.
Im zweiten Parameter wird dann einfach $1 durch den gefundenen Ausdruck ersetzt.
Ich hoffe das war halbwegs verständlich.
Weiter Informationen gibts bei Websiteentwicklung: PHP: Reguläre Ausdrücke - Wikibooks
 
Also...
Die Funktion preg_replace benutzt sogenannte Reguläre Ausdrücke.
Die Syntax kann hierbei auch relativ komplex werden.
Der Suchpattern war bei der Funktion oben folgender:
Code:
#(wort)#i
# ist ein Begrenzer, der den eigentlichen Pattern von den Modifiern wie z.B i abtrennt.
Dieser Modifier besagt einfach, dass Groß- und Kleinschreibung keine Beachtung geschenkt werden soll.
In den Klammern steht der Ausdruck, der am Ende zur weiteren Verwendung gespeichert werden soll. In unserem Fall in $1. Enthielte der Pattern weitere Klammern, ginge auch die Nummerierung weiter.
Im zweiten Parameter wird dann einfach $1 durch den gefundenen Ausdruck ersetzt.
Ich hoffe das war halbwegs verständlich.
Weiter Informationen gibts bei Websiteentwicklung: PHP: Reguläre Ausdrücke - Wikibooks
Gut, ich glaube so einigermaßen habe ich es verstanden.
Aber so wie du es erklärt hast, müsste dann dein Code Beispiel nicht gehen, weil
PHP:
#($v)#i
hier ja ein $v steht und keine $1 oder?
 
@ Slibbo
Wäre wahrscheinlich auch kürzer gegangen: ;)

:arrow:
PHP:
function whitespace(&$string) {
    $string = implode(" ", explode("", $string));
}
function strongen(&$string,$pattern) {
    $string = preg_replace("/".preg_quote($pattern,"/")."/is","<strong>".$pattern."</strong>",$string);
}
 
Bei letzterem sicherlich. :)
Allerdings gibt es explode("",$str) in PHP nicht. (!= Perl)
Ist delimiter ein leerer String (""), so gibt explode() FALSE zurück
Also muss man gezwungener Maßen auf str_split oder eine Schleife zurückgreifen.

Gruß
Voodoo
 
ok danke! Habe noch eine Frage:
Wie kann ich zwei wörter in einem String in 2 Strings aufteilen, bzw in einem Array speichern?

BSP:
PHP:
$string = "Test Text soll gesplittet werden";

# So solls dann nachher sein:
$string = array("Test", "Text", "soll", "gesplittet", "werden");

EDIT:
Ich habe hier mal ein Skript gemacht:
PHP:
<?php
            $suche = $_POST['suche'];
            if($suche == "Suche...") echo "Sie müssen etwas eingeben zum Suchen!";
            elseif(empty($suche)) {
            #nix
            }
            elseif(strlen($suche) <= 3) echo "Zu kurzer Suchbegriff!";
            elseif(!empty($suche)) {
            echo "<h2>Suchergebnisse zu: <span style='color:#333333;'>$suche</span></h2><br><br>";
            $suche = str_replace(" ", "%", trim($suche, " "));
            $result = mysql_query("SELECT * FROM suche WHERE titel LIKE '%".$suche."%' OR beschreibung LIKE '%".$suche."%' ORDER BY klicks DESC") or die(mysql_error());
            while($ds = mysql_fetch_object($result)) {
                $beschreibung = $ds->beschreibung;
                $titel = $ds->titel;
                $link_ = $ds->link_;
                $klicks = $ds->klicks;
                
                function do_format($array) {
                    foreach($array as $v) {
                        $r[] = "#($v)#i";
                    }
                    return $r;
                }
                $l = do_format(explode(" ", str_replace("%", " ", $suche), 1000000000000));
                $beschreibung = preg_replace($l,"<strong>$1</strong>",$beschreibung);
                ?>
                <a href="<?="http://".$link_?>" style="font-weight:bold;"><?=$titel?></a>
                <p><?=$beschreibung?></p>
                <i style="font-size:9px;"><?=$link_?> - <?=$klicks?> K</i>
                <br><br>
                <?php
                unset($beschreibung, $titel, $worter2, $worter);
            }
            }
            else {
            # Nix
            }
            ?>

Das giebt erstens nur einen Eintrag aus der DB aus und zweitens funktioniert das mit dem Ersetzen nicht. Hier die Seite: Infinitys Homepage
Gebt dort mal "Tipps zu" ein.
 
Zuletzt bearbeitet:
einen satz kannst du mit ecplode(); an den leerzeichen trennen also

PHP:
explode(' ', $satz);
 
Ich empfehle dir einfach mal deinen Code ordentlich zu gestalten ^^
Dan hat vielleicht jemand lust den zu lesen und hilft dir...

PHP Coding Standard: Home

Einfach mal lesen... ;)

Nebenbei... warum gibst du bei Explode ein Limit an? :-D
 
ok, ich werd ihn mal Ordentlich machen und dann reinstellen.

So, hier ist jetzt Der Code. Ich hoffe er ist verständlicher:

PHP:
<?php
            $suche = $_POST['suche'];
            // Die Variable $suche wird mit dem Suchwort definiert
            if($suche == "Suche...")
                echo "Sie müssen etwas eingeben zum Suchen!"; // Falls $suche = Suche... entspricht, Wird ausgegeben "Sie müssen etwas eingeben zum Suchen!"
            elseif(empty($suche)) {
                // Hier passiert nichts.
            }
            elseif(strlen($suche) <= 3)
                echo "Zu kurzer Suchbegriff!"; // Falls $suche weniger als oder gleich 3 Zeichen hat, wird der Text ausgegeben.
            elseif(!empty($suche)) {
                //Hier wird nun Die Suche gestartet.
                // echo gibt den Text aus.
                echo "<h2>Suchergebnisse zu: <span style='color:#333333;'>$suche</span></h2><br><br>";
                $suche = str_replace(" ", "%", trim($suche, " ")); // Die Leerzeichen in Suche werden mit % ausgetauscht. Das dient dazu, dass MYSQL die einzelnen Wörter sucht, und nicht im Zusammenhant. Das hat zur Folge, dass auch Sachen gefunden werden, wo die Wörter nicht hintereinander Stehen.
                $result = mysql_query("SELECT * FROM suche WHERE titel LIKE '%".$suche."%' OR beschreibung LIKE '%".$suche."%' ORDER BY klicks DESC") or die(mysql_error()); // Die Suche in der Datenbank nach $suche
                while($ds = mysql_fetch_object($result)) {
                    $beschreibung = $ds->beschreibung; // Die Beschreibung wird ausgelesen und Definiert
                    $titel = $ds->titel; // Der Titel wird ausgelesen und definiert
                    $link_ = $ds->link_; // Der link wird ausgelesen und definiert
                    $klicks = $ds->klicks; // Die Klicks werden ausgelesen und definiert
                    
                    /* Der Nachfolgende Code verursacht den Fehler. Wenn ich ihn nämlich aukommentiere funktioniert alles wie es soll. */
                    function do_format($array) {
                        foreach($array as $v) {
                            $r[] = "#($v)#i";
                        }        
                        return $r;
                    }
                    $l = do_format(explode(" ", str_replace("%", " ", $suche), 1000000000000));
                    $beschreibung = preg_replace($l,"<strong>$1</strong>",$beschreibung);
                    /* Hier ist der Fehlerhafte Code nun zu Ende. Dort müsste der Fehler liegen. */
                    /* Im Nachfolgenden Code geschieht die Ausgabe */
                    ?>
                    <a href="<?="http://".$link_?>" style="font-weight:bold;"><?=$titel?></a>
                    <p><?=$beschreibung?></p>
                    <i style="font-size:9px;"><?=$link_?> - <?=$klicks?> K</i>
                    <br><br>
                    <?php
                    /* Hier ist die Ausgabe zuende */
                    unset($beschreibung, $titel, $worter2, $worter); // Hier werden die Variablen geleert
                }
            }
            else {
                // Nichts passiert
            }
            ?>
 
Zuletzt bearbeitet:
Also...
eine Funktion sollte man nur einmal deklarieren. Darum ist es eine relativ schlechte Idee, diese in eine Schleife zu stecken.
Ich denke, so sollte dein Code funktionieren:
PHP:
<?php
    function do_format($array) {
                foreach($array as $v) {
                    $r[] = "#($v)#i";
                }        
                return $r;
            }
    $suche = $_POST['suche'];
    // Die Variable $suche wird mit dem Suchwort definiert
    if($suche == "Suche...")
        echo "Sie müssen etwas eingeben zum Suchen!"; // Falls $suche = Suche... entspricht, Wird ausgegeben "Sie müssen etwas eingeben zum Suchen!"
    elseif(empty($suche)) {
        // Hier passiert nichts.
    }
    elseif(strlen($suche) <= 3)
        echo "Zu kurzer Suchbegriff!"; // Falls $suche weniger als oder gleich 3 Zeichen hat, wird der Text ausgegeben.
    elseif(!empty($suche)) {
        //Hier wird nun Die Suche gestartet.
        // echo gibt den Text aus.
        echo "<h2>Suchergebnisse zu: <span style='color:#333333;'>$suche</span></h2><br><br>";
        $suche = str_replace(" ", "%", trim($suche, " ")); // Die Leerzeichen in Suche werden mit % ausgetauscht. Das dient dazu, dass MYSQL die einzelnen Wörter sucht, und nicht im Zusammenhant. Das hat zur Folge, dass auch Sachen gefunden werden, wo die Wörter nicht hintereinander Stehen.
        $suchworte = do_format(explode(" ", str_replace("%", " ", $suche)));
        $result = mysql_query("SELECT * FROM suche WHERE titel LIKE '%".$suche."%' OR beschreibung LIKE '%".$suche."%' ORDER BY klicks DESC") or die(mysql_error()); // Die Suche in der Datenbank nach $suche
        while($ds = mysql_fetch_object($result)) {
            $beschreibung = $ds->beschreibung; // Die Beschreibung wird ausgelesen und Definiert
            $titel = $ds->titel; // Der Titel wird ausgelesen und definiert
            $link_ = $ds->link_; // Der link wird ausgelesen und definiert
            $klicks = $ds->klicks; // Die Klicks werden ausgelesen und definiert
            // Suchwörter in der Beschreibung hervorheben
            $beschreibung = preg_replace($suchworte,"<strong>$1</strong>",$beschreibung);
            /* Im Nachfolgenden Code geschieht die Ausgabe */
            ?>
            <a href="<?="http://".$link_?>" style="font-weight:bold;"><?=$titel?></a>
            <p><?=$beschreibung?></p>
            <i style="font-size:9px;"><?=$link_?> - <?=$klicks?> K</i>
            <br><br>
            <?php
            /* Hier ist die Ausgabe zuende */
            unset($beschreibung, $titel, $worter2, $worter); // Hier werden die Variablen geleert
        }
    }
    else {
        // Nichts passiert
    }
?>
Gruß
Voodoo
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben