Sie befinden sich hier im Forenarchiv von phpforum.de wenn Sie direkt ins Forum möchten, klicken Sie bitte hier. Zur Startseite kommen Sie hier.

Regexp: Im Pattern alles in html-tags unangetastet lassen

Hiho

Ich verusche schon den ganzen Tag verzweifelt ein pattern zu erstellen, welches in einem String zwar gewünschte Buchstaben findet ( und dann ersetzt, was jetzt aber net intressiert ), dieses zwichen HTML-Tags schön bleiben lässt .

einfach alles zwischen < > ausschliessen geht net, da bei:

<font color=red> Text 1 2 3 </font>

der Text ja auch zwischen < > steht :\

Aber ich bekomm es einfach net gebacken das Pattern so zu erstellen, das er NUR die Html-Tags in ruhe lässt ... Einige andere aus verschiedenen php-Channels in IRC-Netzen bekommen es auch net hin.
Google war auch net wirklich erfolgreich

Das ganze ist eine Funktion per die per preg_replace_callback einen Text nach z.B " " ( Leerzeichen) durchsucht , dieses dann an preg_replace schickt. Dieses entscheidet per Zufall, ob es das ganz nun ersetzt ( fragt net nach dem Sinn des ganzen. Klingt für aussenstehende komisch :D ) oder eben net.

nun such ich in diesem preg_replace z.B nach einem Leerzeichen : '|( )|U' und ersetze das dann halt.

Aber wie bekomm ich das nun hin, das mir eben nur Leerzeichen geändert werden, die NICHT in HTML Tags stehen ?

Ihr seid meine letzte Hoffnung :)

Mfg Sea

Hier gehts zum Orginal Eintrag "Regexp: Im Pattern alles in html-tags unangetastet lassen" im Forum

Antworten

Code:                   In Zwischenablage kopieren (nur IE)
1">

Was hier so mühelos aussieht hat mich doch aber auch tatsächlich ein bisschen Gehirnschmalz gekostet :)


2.

Hi

Erstmal Thx für deine Bemühungen.

Aber das sucht jetzt irgendwie nur Text zwischen 2 html Tags raus und beseitigt dann das html ^^ .
Und einzelZiffern sucht er auch net :\

Angenommen ich habe einen Text:


$string = "".strtoupper("Another Test")." <font color=red>Ein Text mit Leerzeichen und ( und ) [ ] ! : -&nbsp;-</font> der mich noch mal umbringt";


Und will dann "Leerzeichen: " ( ) [ ] usw ersetzen durch Unicode :


$normzeichen = array('|(\()|',
'|(\))|',
'|( )|', // Leerzeichen
'|(:)|',
'|(&nbsp;)|',
'|(\[)|',
'|(!)|',
'|(\])|');

$unicode = array('&#x28;',
'&#x29;',
'&#x20;', // Leerzeichen
'&#x21;',
'&#x3A;',
'&#x20;',
'&#x5B;',
'&#x5D;');

und ich will, das er dann diese Zeichen entsprechend ausserhalb html ersetzt ....

preg_replace($normzeichen,$unicode,$string);








In Meinem Fall funktioniert das bisher so :


<?php

$string = "".strtoupper("Another Test")." <font color=red>Ein Text mit Leerzeichen und ( und ) [ ] ! : -&nbsp;-</font>";




function randnorm2html($string) {
// Zeichen die ersetzt werden sollen
function normzeichen(){
$retwert = array('|(\()|',
'|(\))|',
'|( )|',
'|(:)|',
'|(&nbsp;)|',
'|(!)|',
'|(\[)|',
'|(\])|');


// '|()|',
return $retwert;
}

// die Zeichen mit denen die normalen ersetzt werden sollen
function htmlzeichen(){
$retwert = array('&#x28;',
'&#x29;',
'&#x20;',
'&#x3A;',
'&#x20;',
'&#x21;',
'&#x5B;',
'&#x5D;');


// '&#x;',
return $retwert;
}


function norm2html($matches) {
//ersetzen
if(rand(1,50)>= 25) {
return preg_replace(normzeichen(),htmlzeichen(),$matches[1]);
}
else {
return $matches[1];
}
}




// und zurückgeben
return preg_replace_callback(normzeichen(),norm2html,$string);



}



echo "".randnorm2html($string)."<br>";

?>



( Ja ich weiss .. function in function ist grausam . Und das die 2 arrays in funktionen stehen ist auch komisch, liegt aber daran, das ich kein global verwenden soll . )

dieses beachtet jetzt zwar HTML nicht, erfüllt aber die Suchen und ersetzen Funktion so wie es soll.


Im Endeffekt soll der Text also der exact selbe bleiben. Für den Betrrachter zumindest. Im Source sollen aber die verschiedenen Zeichen durcheinandergewürfelt werden.


Thx für eure Hilfe :)

Mfg Sea


3.

ich hab' das zwar nicht so ganz verstanden, aber gebe trotzdem mal meinen Senf dazu ab :]
Du könntest den gesamten Text über die html-tags trennen lassen und dann den jeweiligen substring darauf abtesten, ob er mit < anfängt oder nicht.
Code:                   In Zwischenablage kopieren (nur IE)
2">

Das, was jetzt hier rot angezeigt wird, darfst Du dann nicht anfassen. Innerhalb des grünen kannst Du ersetzen lassen

...wenn ich das Problem richtig verstanden habe.


Hier gehts zum Orginal Eintrag "Regexp: Im Pattern alles in html-tags unangetastet lassen" im Forum
 
phpforum.de | Impressum | Handy Bundles