php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2006

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 15.07.2006, 21:54  
Erfahrener Benutzer
 
Registriert seit: 30.04.2004
Beiträge: 225
rocco
rocco eine Nachricht über ICQ schicken
Standard htmlentities() nur auf bestimmten Bereich

Hallo!

Meine Frage an Hand eines Bsp:
Zitat:
Ich gebe hier jetzt einen <Text> ein und -#dieser <Text>-# ist völlig

Wie kann ich es nun zustandebringen, dass mir alle Sonderzeichen in HTML-Tags umgewandelt werden, bis auf jene, die zwischen zwei Zeichenfolgen (in dem Fall -#) stehen. Und das ganze bei einer unbekannten Anzahl von zu unterscheidenten Textteilen. (Soll heißen, dass man nicht weiß, wieviel -# -Passagen man hat)

Vielen Danke im Vorraus, Rocco

PS: Zur weiteren Erläuterung; der HTML-Tag meines Bsp sollte im Endeffekt dann so aussehen:
Zitat:
Ich gebe hier jetzt einen &lt;Text&gt; ein und dieser <Text> ist v&ouml;llig sinnlos
rocco ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 15.07.2006, 22:28  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

PHP-Code:
<?php
$string 
"Ich gebe hier jetzt einen <Text> ein und -#dieser <Text>-# ist völlig";

header('Content-type: text/plain'); // nur um die Ausgabe ersichtlicher zu machen

$last 0;
$counter 0;
$delimiter '#';
$delimiterLength strlen($delimiter);

$newString '';

for (
$i 0$max strlen($string) - $delimiterLength$i $max$i++) {
    
$change false;
    if (
substr($string$i$delimiterLength) == $delimiter) {
        
$counter++;
        
$change true;
    }
    
    if (
$change) {
        if (
$counter 2) {
            
$newString .= htmlentities(substr($string$last$i $last));
        } else {
            
$newString .= substr($string$last$i $last);
        }
        
$last $i;
    }
}
$newString .= htmlentities(substr($string$last));

print 
$string;
print 
"\n----------------------------------------------------------------\n";
print 
$newString;
?>
Ich habe es gerade auch mit preg_replace_callback() versucht, mir ist jetzt allerdings kein RegExp eingefallen, der auf diese Bedingung zutrifft, also nicht von der Raute umgeben zu sein, denn letztlich sind das die mittleren ja immer. Höchstens über die Anzahl (gerade, ungerade) davor bzw. dahinter wäre das rauszufinden, aber das ist mit regulären Ausdrücken nicht möglich (korrigiert mich wenn das nicht stimmt).

Wozu brauchst du das überhaupt?
Zergling-new ist offline  
Alt 15.07.2006, 23:42  
Erfahrener Benutzer
 
Registriert seit: 18.07.2004
Beiträge: 2.162
PHP-Kenntnisse:
Fortgeschritten
Basti
Standard

Kommt mir irgendwie umständlich vor.

PHP-Code:
<?php

$sDelimiter 
'-#';
$sOrig      'Ich gebe hier jetzt einen <Text> ein und -#dieser <Text>-# ist völlig';
$sResult    '';

$aParts explode($sDelimiter$sOrig);

$i 0;
foreach (
$aParts as $sPart) {
    if (!
$i 2)
        
$sPart htmlentities($sPart);
    
$sResult .= $sPart;
    
$i++;
}

echo 
$sResult;
?>
Basti
Basti ist offline  
Alt 16.07.2006, 02:23  
Erfahrener Benutzer
 
Registriert seit: 13.08.2007
Beiträge: 1.976
KingCrunch befindet sich auf einem aufstrebenden Ast
KingCrunch eine Nachricht über ICQ schicken KingCrunch eine Nachricht über AIM schicken KingCrunch eine Nachricht über MSN schicken KingCrunch eine Nachricht über Yahoo! schicken
Standard

Das ist schon konzeptionell .. falsch! Du benutzt für einen Anfangs"tag" und End"tag" das selbe Symbol, wodurch die Engine nicht unterscheiden kann, wann etwas zwischen irgendetwas liegt, oder nur zufällig zwischen zwei geschlossenen Blöcken.
Code:
abc -# cde -# fgh -# ijk
In dem Fall würde fgh ebenfalls zwischen zwei von dir definierten Delimitern sitzen und ijk ... im Nirvana ^^, was aber wahrscheinlich nicht von dir gewollt ist

Sinnvoller wäre an dieser Stelle vermutlich preg_replace_callback und wahrscheinlich in Zusammenhang mit einer anonymen Funktion. Vorrausgesetzt die Tags werden geändert Nehme man Tags "#-" für den Anfang und "-#" für das Ende:
PHP-Code:
$string "Ich gebe hier jetzt einen <Text> ein und #-dieser <Text>-# ist völlig";

$function create_function('$args'"return ." html_entities($args[0]));

$string preg_replace_callback("~#-([^#-])-#~"$function$string); 
Das is ma so dahin gekritzelt, wobei die anonyme Funktion durchaus auch als reale Funktion definiert werden darf Obs funktioniert? Naja, probiers aus
KingCrunch ist offline  
Alt 16.07.2006, 02:38  
Erfahrener Benutzer
 
Registriert seit: 18.07.2004
Beiträge: 2.162
PHP-Kenntnisse:
Fortgeschritten
Basti
Standard

Zitat:
Zitat von KingCrunch
Das ist schon konzeptionell .. falsch!
Was weißt du, was wir nicht wissen? Ich hab in die Anforderungen (außer den beschriebenen eben) noch keinen Einblick bekommen...

Basti
Basti ist offline  
Alt 16.07.2006, 02:47  
Erfahrener Benutzer
 
Registriert seit: 13.08.2007
Beiträge: 1.976
KingCrunch befindet sich auf einem aufstrebenden Ast
KingCrunch eine Nachricht über ICQ schicken KingCrunch eine Nachricht über AIM schicken KingCrunch eine Nachricht über MSN schicken KingCrunch eine Nachricht über Yahoo! schicken
Standard

Zitat:
Zitat von Basti
Zitat:
Zitat von KingCrunch
Das ist schon konzeptionell .. falsch!
Was weißt du, was wir nicht wissen? Ich hab in die Anforderungen (außer den beschriebenen eben) noch keinen Einblick bekommen...

Basti
Ja, ne, is klar! Bloss sollte bei einer solchen Konstruktion der Start- und Endtag nicht identisch sein, wodurch Fehler provoziert werden. Das Problem lag eben nur bei eben diesen einen Punkt ^^ (nebenbei verkompliziert er einiges, weil er immer "Halbkonstruktionen" erlaubt! ok, find ich grad etwas schwierig zu erklären... OK, wenn jemand, das Endtag vergisst, wird das darauf folgende Starttag als Endtag verwendet und irgendwelche merkwürdige Dinge geschehen. Was mit dem letzten Start-/Endtag dann passiert... kommt auf die Umsetzung drauf an
KingCrunch ist offline  
Alt 16.07.2006, 09:25  
Erfahrener Benutzer
 
Registriert seit: 30.04.2004
Beiträge: 225
rocco
rocco eine Nachricht über ICQ schicken
Standard

Erstmals danke für die große Resonant! Ich dachte mir schon, dass es mit unterschiedlichen Anfangs- und End-Tags vllt leichter wäre, wusste es aber auch nicht.

Zitat:
Zitat von KingCrunch
PHP-Code:
$string "Ich gebe hier jetzt einen <Text> ein und #-dieser <Text>-# ist völlig";

$function create_function('$args'"return ." html_entities($args[0]));

$string preg_replace_callback("~#-([^#-])-#~"$function$string); 
Leider kenn ich nur die Grundzüge von PHP, da ich mehr nicht brauche. Kannst du mir vllt das mal erklären und zeigen wie ich das jetzt implementiere. Ich hab micht mit den Funktionen preg_replace_callback und create_function zwar jetzt kurz auseinandergesetzt, versteh aber leider nicht viel.
Ansonsten gibts zwar noch eine andere Lösung, die ich zwar alleine zu Stande bringen würd aber die gefällt mir nicht so.

Vielen Dank, Rocco
rocco ist offline  
Alt 16.07.2006, 11:01  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Du hast doch 2 Lösungen, die von Basti und von mir..
Zergling-new ist offline  
Alt 16.07.2006, 11:52  
Erfahrener Benutzer
 
Registriert seit: 30.04.2004
Beiträge: 225
rocco
rocco eine Nachricht über ICQ schicken
Standard

Die von Basti ist doch
Zitat:
Zitat von KingCrunch
schon konzeptionell .. falsch!
, oder?

Naja, ich werd mit den Antworten schon was zusammenbasteln. Jetzt weiß ich wenigstens in welche Richtung ich an die Sache gehn muss.

Danke!
Rocco
rocco ist offline  
Alt 16.07.2006, 12:06  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Ja, ein Start- und ein End-Tag sind natürlich besser, aber wenn du keine Fehler machst, macht das Script auch keine.
Zergling-new ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Bereich um einen float left und float right Bereich andrew22 HTML, Usability und Barrierefreiheit 8 27.02.2007 18:27
3zeiliges div Seitenlayout - 3. Bereich zu tief HStev HTML, Usability und Barrierefreiheit 7 21.04.2006 16:13
Timestamp 0:00Uhr aller Tage in einem bestimmten Bereich CC84 PHP Tipps 2006 14 07.02.2006 16:00
Newsposting aus gesondertem Bereich Beitragsarchiv 5 04.08.2005 18:13
Bestimmte elemente nur zu bestimmten Daten anzeigen lassen PHP Tipps 2005-2 3 14.07.2005 14:05
wie erstelle ich eine Festen Bereich (Navigation) PHP Tipps 2005-2 9 30.06.2005 16:01
Array Ausgabe zu einem bestimmten Datum PHP Tipps 2005 5 01.06.2005 17:15
[Forum-Projekt] Verständnisfrage zu htmlentities aktionkuba PHP Tipps 2005 9 08.04.2005 10:00
[Erledigt] Zugriff auf Dateien im passwortgeschützten Bereich PHP Tipps 2005 15 16.03.2005 17:50
bestimmten string aus spalte auslesen aircrash PHP Tipps 2005 3 01.02.2005 18:07
[Erledigt] Bereich der Intranet-Website auf einigen PCs nicht aufrufbar PHP-Fortgeschrittene 7 20.01.2005 16:40
PHP und Mysql für Internen Bereich Beitragsarchiv 3 27.10.2004 10:53
Sicherer Bereich mit .htaccess + phpskript auf einem Server PHP Tipps 2004 2 23.07.2004 18:25
Scrollen in einem bestimmten Bereich der Tabelle HTML, Usability und Barrierefreiheit 2 20.06.2004 14:16

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
htmlentities substr, htmlentities bedingung, php string teilen starttag, htmlentities bestimmter bereich, hmtlentities bestimmten bereich

Alle Zeitangaben in WEZ +2. Es ist jetzt 18:12 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.