Leerzeichen einfügen / html tags überspringen

Grimreaper

Erfahrenes Mitglied
Hallo Leute!

Ich habe folgendes Problem: Ich lese drei Texte aus einer Datenbank (alle ohne Leerzeichen), ein Haupttext und zwei Teilstücke, die im Haupttext vorkommen:

Code:
//Primer
        $Primer = explode("//", $row ->  Primer);
//Sequence
         $Sequence = $row ->  Sequence;
         $Pos = strpos($Sequence, $Primer[1]);
         //highlight primer
         $output = "<span class=error>".substr($Sequence, 0, strlen($Primer[0]))."</span>".
                             substr($Sequence, strlen($Primer[0]), $Pos-strlen($Primer[0]))."<span class=error>".
                             substr($Sequence, $Pos, strlen($Primer[1]))."</span>".substr($Sequence, $Pos + strlen($Primer[1]));
         unset($Primer);
         $Sequence_P[] = $output; //Sequence with Primer

Die „Sequence“ sieht etwa so aus:
abcdefghijklmnopqrstuvwxyz

Sequence_P[0] würde so aussehen
abcdefghijklmnopqrstuvwxyz (vorrausgesetzt die Primer wären abc & xyz)

Jetzt möchte ich aber, dass bei der Ausgabe alle zehn Zeichen ein Leerzeichen eingefügt wird, also so:
abcdefghij klmnopqrst uvwxyz

Das Problem ist, das mein Script mir auch in die HTML tags (<span class=error> & </span> zum rotfärben) Leerzeichen reinsetzt und die dann vom Browser natürlich nicht mehr erkannt werden. Ich habe versucht das mit folgendem Code zu unterbinden, aber irgendwie klappt das nicht:
Code:
//Sequence optisch aufbereiten
          $i = 0; $x = 1; $htmltag = false;
          $buff = $Sequence_P[0];
           echo "<p><pre>$buff</pre></p>";
           while($i<strlen($buff)) {
                      $seq .= $buff[$i];
                       if ($seq[$i] == "<") {
                               $htmltag = true;
                       };
                       if ($seq[$i-1] == ">") {
                               $htmltag = false;
                      };
                      //echo "<br>tag: $htmltag, zeichen: $seq[$i]";
                      if ($htmltag == false) {
                                $x++;
                                //     echo "<br>$x";
                                if (fmod($x,10)==0) {  //irgendwie macht er hiermit trotzdem Leerzeichen rein, obwohl er erkennt das es html-tags sind
                                          $seq = $seq." ";
                                          $x=0;
                                  };
                         };
                         $i++;
           };

Hat jemand ne Idee was da falsch ist?

mfg Grimreaper
 
Ähm, ich versuche jetzt einfach mal irgendwie zu interpretieren, was genau Dein Problem ist.

Du willst vermutlich folgendes:
Ausgang (Datenbank):
abcdefghijklmnopqrstuvwxyz

Ziel (Browser):
abcdefghij klmnopqrst uvwxyz

Sehe ich das richtig?

Ja? Dann bist Du evtl. bei der Reihenfolge etwas durcheinander gekommen. Du müsstest ERST die Leerzeichen einfügen, DANN den HTML-Code. Das wär die einfachste Lösung.

Parse einfach den String durch und füge alle zehn Zeichen ein Leerzeichen ein. Danach führe den Code aus, um Deine HTML-Tags einzufügen. Evtl. musst Du diesen Teil noch umgestalten, damit dieser die Leerzeichen auch berücksichtigt. Vielleicht dadurch, dass Du aus dem Such-String die Leerzeichen wieder rauslöschst.

Hab jetzt leider keine Zeit Dir einen Quelltext dazu zu schreiben ... aber so als Denkanstoß dürfte es reichen. :)
 
Du hast mich richtig verstanden, ja... Natürlich habe ich auch daran gedacht zuerst leerzeichen einzufügen und dann die HTML-tags, mein Problem ist dann aber, dass ich den Suchstring vielleicht nicht finde:
Code:
Bsp
abcdefghijklmnopqrstuvwxyz -> abcde fghij klmno pqrst uvwxy z

wenn ich jetzt defg und xyz hervorheben möchte, finde ich sie natürlich nicht mehr. Allerdings hast du mich auf die Idee gebracht die Teilstücke im unveränderten Text zu suchen und dann zu berechnen, wie viele Leerzeichen enthalten sein müssten, um so auf die richtige Position zu kommen... Also
$Pos = strpos($Text,$Teilstück)+(Leerzeichen bis dahin)

Ich muss mal sehen ob das so klappt. Falls dir ein besserer Weg einfällt poste ihn bitte.

mfg Grimreaper
 
Zuletzt bearbeitet:
Meistens ist es einfach besser wenn man sagt was man vorhat und wie man es sich vorstellt umzusetzen.
Ich bin mir eigentlich ziemlich sicher das ich PHP kann aber das was du da machst versteh ich nicht ^^.

Also schreib einfach mal was du machen möchtest, dann kann man dir sicherlich auch bei der Umsetzung helfen.
 
So, ich glaube ich bin auf dem richtigen weg. Ein Problem habe ich: Wie finde ich heraus, wie oft eine Zahl in eine andere passt. Also wenn ich die beiden Zahlen 17 und 5 habe, dann möchte ich 3 rausbekommen (17 / 5 = 3 Rest 2).

@SonicBe@m
Hm, das war eigentlich ziemlich genau was ich vorhabe ;) Also etwas genauer: Ich habe eine Gen-Sequenz (z. B. actgcgatcgacgactgactgcatcg) und ich möchte zwei bestimmte Teile dieser Sequenz hervorheben (sowohl die Sequenz als auch die beiden Teilstücke ziehe ich aus ner DB). Nun ist es aber übersichtlicher (und auch standard), wenn diese Sequenz in 10er Blöcke unterteilt wird. Da habe ich nur das Problem, dass ich meine HTML-Tags damit zerschieße...

mfg Grimreaper
 
ich hab grad keine ahnung ob es soetwas wie div in delphi auch in php gibt (müsste es eigentlich, oder? finde es aber nich :/)
das könnte aber evtl. aushelfen (bestimmt nicht die beste lösung):
PHP:
$var = $substr(17/5,0,1); //ergibt 3
$var2 = 17%5 //ist der rest, 2
 
Ich habs bei php.net nicht gefunden, also hab ichs einfach so gemacht: $ganzzahl_anteil = floor($Zahl / 10);

Also, dank dem Denkanstoß von Saber ist es nun geschafft, das Highlighting klappt wunderbar...
 
Zurück