Multibyte Funktion unter php5 fehlerhaft

Alles, was PHP betrifft, kann hier besprochen werden.

Multibyte Funktion unter php5 fehlerhaft

Postby campylobacter » 06. October 2006 21:39

Hallo,

Ich habe leider ein kleines Problem. Dieses Script funktioniert mit php4 problemlos, arbeitet aber unter php5 fehlerhaft:
Code: Select all
<?php

header( 'Content-Type: text/html; charset=UTF-8' );

$str = "Das den sind kommenden schlimme Über Schäden oder am Dach!";
echo $str . '<br>';

mb_internal_encoding( 'UTF-8' );
echo preg_replace("/\b(das|den|über|sind|am|oder)\b/iu", '@@@', $str ) . '<br>';
echo mb_eregi_replace("\b(das|den|über|sind|am|oder)\b", '@@@', $str ) . '<br>';

exit;
?>

Entscheidend ist das Wort Schäden. Es wird unter php5 nicht als ganzes Wort verarbeitet.

Weiß jemand, woran es liegen kann, bzw. wie man das lösen könnte?

Vielen Dank!
mfg campy
campylobacter
 
Posts: 11
Joined: 03. December 2003 11:39

Postby Wiedmann » 06. October 2006 23:04

Nachvollziehen kann ich das Verhalten was du beobachtest.

Tatsächlich verhält sich mb_eregi_replace unterschiedlich. Wobei eigentlich beide Verhaltensweisen falsch sein müssten ;-)

Das ist ja "nur" die Multibyte-Version von eregi_replace(). Da Regex nach POSIX 1003.2 aber kein word-boundary mit "\b" kennt, dürfte hier weder mit PHP4 noch mit PHP5 überhaupt irgendeine Ersetzung stattfinden... (da da noch nach dem "b" vor und danach gesucht wird, der "\" wird hier ignoriert).
Wiedmann
AF Moderator
 
Posts: 17106
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Postby campylobacter » 07. October 2006 08:19

Ok, das wäre ja einleuchtent. Aber wieso funktioniert dann preg_replace nicht, obwohl der Unicode Flag /u gesetzt wurde?
campylobacter
 
Posts: 11
Joined: 03. December 2003 11:39

Postby campylobacter » 07. October 2006 09:02

Ich glaub ich habs. Wenn man vor dem mb_eregi_replace noch mb_regex_encoding( 'UTF-8' ); schreibt, funktioniert das auch unter php5. Hoffentlich ändert sich mit php6 da einiges. Im Moment ist das eine ganze schöne Qual mit Unicode.
campylobacter
 
Posts: 11
Joined: 03. December 2003 11:39

Postby Wiedmann » 07. October 2006 12:07

Aber wieso funktioniert dann preg_replace nicht

Also das gibt bei mir dieses aus:
Code: Select all
@@@ @@@ @@@ kommenden schlimme @@@ Schäden @@@ @@@ Dach!

Und das hätte ich auch erwartet bei deiner Regex.

Wenn man vor dem mb_eregi_replace noch mb_regex_encoding( 'UTF-8' );

Yup. Dann macht er's. Obwohl es diese Function ja laut Manual nur bei PHP4 gegen soll? *grübel*

Wie auch immer. Schau lieber, warum bei dir das preg nicht tut. ereg soll man ja eh nicht nehmen (und fliegt auch demnächst raus).
Wiedmann
AF Moderator
 
Posts: 17106
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany


Return to PHP

Who is online

Users browsing this forum: No registered users and 4 guests