php.de

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

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 07.03.2007, 15:33  
Erfahrener Benutzer
 
Registriert seit: 07.11.2003
Beiträge: 526
Promaetheus
Standard wiedermal sonderzeichen

ich bin recht verwirrt. ich habe ein problem bei folgendem ding:

Code:
$string = 'hans';
echo preg_match("[a]", $string) ? 'true' : 'false';
// ergebnis true

$string = 'h/ns';
echo preg_match("[/], $string) ? 'true' : 'false';
// ergebnis true

$string = 'h?ns';
echo preg_match("[\?], $string) ? 'true' : 'false';
// ergebnis true

//ABER kombination:
$string = 'h?/ns';
echo preg_match("[\?/], $string) ? 'true' : 'false';
// ergebnis ist immer false
meine intention war einfach alle sonderzeichen eines strings zu entdecken die man auch in ordnernamen nicht verwenden darf (\/:*?\")
davon muss ich ja nur \: und ? mit backslash auskommentieren oder? (laut php.net siehe edit eh nur das backslash selber oder?)

bringe die verdammte abfrage einfach nicht hin.

EDIT: ich muss ja nichtmal ? ausklammern normalerweise. aber ohne das \? hat es gar nicht funktioniert. laut php.net müsste es aber auch so klappen
Zitat:
Part of a pattern that is in square brackets is called a "character class". In a character class the only meta-characters are:

\
general escape character
^
negate the class, but only if the first character
-
indicates character range
]
__________________
mfg Alexander Haim
Promaetheus ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 07.03.2007, 16:30  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.989
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

bei allen ausdrücken fehlen die delimiter,
bei 2-4 auch noch ein " am ende des ausdrucks. ich glaub nicht, dass das true ergiebt...
nikosch ist gerade online  
Alt 07.03.2007, 16:46  
Erfahrener Benutzer
 
Registriert seit: 07.11.2003
Beiträge: 526
Promaetheus
Standard

hatte den code mit der hand geschrieben und wohl das abschliessende " vergessen. diese hätte ich als delimiter verwendet.

mit preg_match("#[\\/:*?"]#", $string) funktioniert es aber auch nicht. ich muss ja nur den backslash auskommentieren oder?
__________________
mfg Alexander Haim
Promaetheus ist offline  
Alt 07.03.2007, 18:12  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Ich kann dein Problem nicht nachvollziehen, bei mir funktioniert alles wie erwartet.

3/7 und 7/7 sind die erwarteten Ergebnisse (1).

PHP-Code:
<?php
header
('Content-type: text/plain');

$aString = array('hans''h/ns''h?ns''h?/ns'"hans""h/ns""h?ns""h?/ns");
$aRegExp = array('#[a]#''#[/]#''#[\?]#''#[\?/]#'"#[a]#""#[/]#""#[\?]#""#[\?/]#");

print_r($aString);
print_r($aRegExp);

echo 
"\n\n";

for (
$i 0$i count($aString); $i++) {
    for (
$k 0$k count($aRegExp); $k++) {
        echo 
"$i/$k""\n";
        
var_dump(preg_match($aRegExp[$k], $aString[$i]));
        echo 
"\n\n";
    }
}
?>
Code:
Array
(
    [0] => hans
    [1] => h/ns
    [2] => h?ns
    [3] => h?/ns
    [4] => hans
    [5] => h/ns
    [6] => h?ns
    [7] => h?/ns
)
Array
(
    [0] => #[a]#
    [1] => #[/]#
    [2] => #[\?]#
    [3] => #[\?/]#
    [4] => #[a]#
    [5] => #[/]#
    [6] => #[\?]#
    [7] => #[\?/]#
)


0/0
int(1)


0/1
int(0)


0/2
int(0)


0/3
int(0)


0/4
int(1)


0/5
int(0)


0/6
int(0)


0/7
int(0)


1/0
int(0)


1/1
int(1)


1/2
int(0)


1/3
int(1)


1/4
int(0)


1/5
int(1)


1/6
int(0)


1/7
int(1)


2/0
int(0)


2/1
int(0)


2/2
int(1)


2/3
int(1)


2/4
int(0)


2/5
int(0)


2/6
int(1)


2/7
int(1)


3/0
int(0)


3/1
int(1)


3/2
int(1)


3/3
int(1)


3/4
int(0)


3/5
int(1)


3/6
int(1)


3/7
int(1)


4/0
int(1)


4/1
int(0)


4/2
int(0)


4/3
int(0)


4/4
int(1)


4/5
int(0)


4/6
int(0)


4/7
int(0)


5/0
int(0)


5/1
int(1)


5/2
int(0)


5/3
int(1)


5/4
int(0)


5/5
int(1)


5/6
int(0)


5/7
int(1)


6/0
int(0)


6/1
int(0)


6/2
int(1)


6/3
int(1)


6/4
int(0)


6/5
int(0)


6/6
int(1)


6/7
int(1)


7/0
int(0)


7/1
int(1)


7/2
int(1)


7/3
int(1)


7/4
int(0)


7/5
int(1)


7/6
int(1)


7/7
int(1)
Mach sowas übrigens nicht preg_match(..) ? 'true' : 'false'
if ('false') ergibt nämlich true. Eine sehr häßliche Geschichte, sehr schön zu beobachten bei xtCommerce.
Zergling-new ist offline  
Alt 07.03.2007, 18:47  
Erfahrener Benutzer
 
Registriert seit: 07.11.2003
Beiträge: 526
Promaetheus
Standard

die einzelnen abfragen funktionieren in der tat. nur das gesamte pattern #[\\/:*?"<>]# funktioniert nicht. den backslash bekomm ich nicht gecheckt. \\ für backslash, die restlichen zeichen brauche ich ja nicht auszukommentieren da diese in den eckigen klammern ihre sonderfunktion verlieren.
die anzeigevariante hab ich nur hier zur schnellen darstellung gemacht. die echte abfrage ist so:
if(preg_match($pattern, $2check)) {
$error = true;
}

nur funktioniert leider das pattern noch nicht.
__________________
mfg Alexander Haim
Promaetheus ist offline  
Alt 07.03.2007, 19:49  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.989
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Zitat:
Zitat von Promaetheus
mit preg_match("#[\\/:*?"]#", $string) funktioniert es aber auch nicht....
stimmt auch immer noch nicht ' ' oder " " umgerenzen den string, #, / oder was auch immer den regulären ausdruck.
wenn du als stringbegrenzer " benutzt, mußt du backslashes doppelt maskieren, einmal für die doppelten hochkommata und einmal für den reg. audruck. also : \\\\ für einen backslash.
nikosch ist gerade online  
Alt 07.03.2007, 21:16  
Erfahrener Benutzer
 
Registriert seit: 07.11.2003
Beiträge: 526
Promaetheus
Standard

warum denn 4x du hast doch geschrieben 2x oder? \\\\. wenn ich statt " ' benutze, so passt der obere syntax aber oder? bei strings $string = "<a href=\" ... musste ich ja nur die anführungszeichen auskommentieren. in regex noch mehr?
__________________
mfg Alexander Haim
Promaetheus ist offline  
Alt 07.03.2007, 21:32  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Such doch lieber nach erlaubten anstatt nach unerlaubten Zeichen, oder kennst du alle Sonderzeichen der Welt?
Zergling-new ist offline  
Alt 07.03.2007, 23:09  
Erfahrener Benutzer
 
Registriert seit: 07.11.2003
Beiträge: 526
Promaetheus
Standard

nö. es wird mit dieser abfrage dann ein ordner erstellt. wenn sonderzeichen vorkommen die in ordnernamen nicht vorkommen dürfen (eben nur diese paar wie in windows), dann soll die funktion einen fehler hervorrufen.
__________________
mfg Alexander Haim
Promaetheus ist offline  
Alt 07.03.2007, 23:13  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Dann nenn ich meinen Ordner ".." ^^
Kein User sollte das Recht haben den Namen von Dateien oder Ordnern zu beeinflußen. Wozu auch, mit ModRewrite kannst du ihm vorgaukeln was du willst, obwohl der Ordner in Wirklichkeit vielleicht "123-daemlicher-user" heißt.
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
Ajax und Sonderzeichen? GSJLink HTML, Usability und Barrierefreiheit 1 11.11.2006 14:36
Die Sache mit den Sonderzeichen nach und vor Formularprüfung TailerD PHP Tipps 2006 12 02.06.2006 12:58
Sonderzeichen mit Semikolon in einer Abfrage PHP Tipps 2006 17 04.02.2006 11:34
Wikipedia, Sonderzeichen und file_get_contents(); pb PHP Tipps 2006 2 20.01.2006 20:02
[Erledigt] Problem mit Sonderzeichen PHP -&gt; MySQL -&gt; HTML PHP Tipps 2007 18 07.12.2005 15:23
Liste nach Buchstaben und Sonderzeichen (!) sortiert odaa PHP-Fortgeschrittene 8 11.10.2005 16:26
[Erledigt] Sonderzeichen: &amp;#8805; Datenbanken 2 19.09.2005 16:54
Login Probleme mit Sonderzeichen im Nick PHP Tipps 2005-2 11 21.08.2005 16:54
Sonderzeichen Funktion JeeZ PHP Tipps 2005-2 4 07.07.2005 21:32
Sonderzeichen aus einem großen Text entfernen PHP Tipps 2005 4 25.04.2005 16:51
Sonderzeichen in der Tabelle Mutatos Datenbanken 4 17.03.2005 15:28
Sonderzeichen verbieten PHP Tipps 2005 16 28.02.2005 08:36
mit html sonderzeichen sortieren Datenbanken 3 16.02.2005 15:25
Sonderzeichen über $_GET Calexico PHP Tipps 2005 1 10.02.2005 17:40
[Erledigt] sonderzeichen im browser? PHP-Fortgeschrittene 1 12.10.2004 14:29

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
preg_match_all anführungszeichen, doppel anführungszeichen in php ausklammern regex, php regex im string ausklammern, backslash auskommentieren, 1/5 sonderzeichen, bracket instead of an umlaut php, regexp erlaubte windows ordnernamen

Alle Zeitangaben in WEZ +2. Es ist jetzt 18:36 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.