Schrift
[thread]1081[/thread]

preg_match funktion: Fehler



<< >> 8 Einträge, 1 Seite
nour
 2007-07-06 13:11
#10070 #10070
User since
2006-11-15
108 Artikel
BenutzerIn
[default_avatar]
HAllo ,
ich habe die Folgende fehler auf meine Webseite bekommen:

function.preg-match: Delimiter must not be alphanumeric or backslash in
C:\Program Files\xampp\htdocs\projekt\includes\EditPage.php on line 977

der Programm teil auf den die fehler zeigt ist wie folgend:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function checkUnicodeCompliantBrowser() {
global $wgBrowserBlackList;
if( empty( $_SERVER["HTTP_USER_AGENT"] ) ) {
// No User-Agent header sent? Trust it by default...
return true;
}
$currentbrowser = $_SERVER["HTTP_USER_AGENT"];
foreach ( $wgBrowserBlackList as $browser ) {
if ( preg_match($browser, $currentbrowser) ) {

return false;
}
}
return true;
}

Die zeile 977 ist genau die folgende zeile im oberen code teil:

Code: (dl )
if ( preg_match($browser, $currentbrowser) ) {  


ich habe noch nie solche fehler begegned. kann mich jemand vielleicht helfen was kann ich an meinem Coder ändern??

danke im voraus
renee
 2007-07-06 13:21
#10071 #10071
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Mach jeweils mal
Code: (dl )
preg_match( '/' . $browser . '/', $currentbrowser)


Der Delimiter des Regulären Ausdrucks muss mit dabei sein...\n\n

<!--EDIT|renee|1183713707-->
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
nour
 2007-07-06 13:31
#10072 #10072
User since
2006-11-15
108 Artikel
BenutzerIn
[default_avatar]
hallo,
ich habe es geändert aber es kam die folgende fehler :

Unknown modifier '^' in C:\Program Files\xampp\htdocs\zt-pedia\includes\EditPage.php on line 977
auch
Unknown modifier '/' in C:\Program Files\xampp\htdocs\zt-pedia\includes\EditPage.php on line 977


er erkannt die '/' nicht!

danke im voraus\n\n

<!--EDIT|nour|1183714410-->
renee
 2007-07-06 14:09
#10073 #10073
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Was steht denn in $browser?
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
renee
 2007-07-06 14:56
#10074 #10074
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Oder probier mal einen anderen Delimiter aus. Z.B. # oder ! oder oder oder...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
sid burn
 2007-07-06 15:26
#10075 #10075
User since
2006-03-29
1520 Artikel
BenutzerIn

user image
Da $browser anscheind keine Regex ist, sollte man vorher alle Sonderzeichen von $browser escapen! Aber ka wie das unter PHP genau geht.

Allerdiengs scheint es mir so als ob du lediglich einen String Vergleich machen möchtest. Dann würde ich lieber "==" nutzen anstatt eine Regex.
Nicht mehr aktiv. Bei Kontakt: ICQ: 404181669 E-Mail: perl@david-raab.de
nour
 2007-07-06 16:10
#10076 #10076
User since
2006-11-15
108 Artikel
BenutzerIn
[default_avatar]
hallo
soll ich den so schreiben ?
preg_match( '==' . $browser . '==', $currentbrowser).

Sorry unter delimieter verstehe ich kaum was !

Danke
nepos
 2007-07-06 18:55
#10077 #10077
User since
2005-08-17
1420 Artikel
BenutzerIn
[Homepage] [default_avatar]
Delimiter = Begrenzer.
Z.B.:
/blafasel/ -> Hier ist / der Delimiter
oder
#blafasel# -> hier ist nun # der Delimiter.

Der Delimiter muss immer ein einzelnes Zeichen sein. Sowas wie == geht nicht, weil das quasi einer leeren Regex entsprechend würde. Das erste = markiert den Beginn, das zweite = ist schon wieder das Ende.

Was Sid Burn meinte ist, wenn du nur vergleichen willst, ob $browser exakt dem Wert von $currentbrowser entspricht, dann kannst du gleich
Code: (dl )
if ( $browser == $currentbrowser ) 
schreiben und kannst dir die Regex sparen.

Wenn du wirklich mit einer Regex prüfen willst, und wohl in $browser Zeichen vorkommen, die in ner Regex eine spezielle Bedeutung haben, musst du diese vorher escapen. Oder du benutzt \Q und \E, falls das in PHP geht:
Code: (dl )
preg_match("/\Q$browser\E/", $currentbrowser);

Damit werden Zeichen, die in $browser stehen nicht mehr als Regex sondern quasi so, wie sie da stehen interpretiert. Dadurch haben die für eine RegEx speziellen Sonderzeichen in $browser keine Wirkung mehr.
<< >> 8 Einträge, 1 Seite



View all threads created 2007-07-06 13:11.