Impressum · Kontakt · Hilfe
Besucher online · Mitglieder



Portal > Foren > PHP > PHP-Programmierung > mb_ereg_* vs preg_* und Multibyte-Strings
Antwort
 
Themen-Optionen
Alt 22.09.2005, 17:56   Nach oben    #1
robo47
BIN EIN KRASSA HELD!!!111
 
Benutzerbild von robo47
 
Registriert seit: 02.06.2005
Ort: weiher im tiefsten Odenwald
Beiträge: 1.170
Standard mb_ereg_* vs preg_* und Multibyte-Strings

Also ich arbeite momentan gerade an einem CMS, das theorhetisch rein über UTF-8 läuft, sprich Daten werden so gespeichert (mysql 4.1.x vorrausgesetzt etc)
und bin jetzt darauf gestoßen, dass es zumindst mb_ereg_*-Funktionen gibt. Und weil ich keinen Fehler machen will und mir der Unterschied von
ereg_* vs preg_*
nur dahingehen klar ist, dass die preg_*-Funktionen immer als die schnelleren beschrieben werden. Gibts jetzt irgendwas wo ich aufpassen muss wenn ich anstatt der preg_* die mb_ereg_*-Funktionen benutze ?
Bin für jegleiche Infos in Form von Links, Wissen oder ähnlichem Dankbar weil ich grad total auf dem Schlauch stehe und da keinen Fehler machen will.

weil ja theorhetisch ein regex mit {1,5} bei einem String mit multibyte-chars fehlerhaft wird, bzw nicht das gewünschte ergebnis herauskommt.

Vieleicht kann mir auch jemand sagen warum es keine mb_preg_*-Funktionen gibt.

mfg
robo47
robo47 ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 22.09.2005, 18:03   Nach oben    #2
Guradia
Benutzer
 
Benutzerbild von Guradia
 
Registriert seit: 18.08.2005
Ort: Düsseldorf
Beiträge: 57
Standard

Ich tue das bereits und bislang ohne nennenswerten probleme, allerdings auch ohne nennenswerte ausnutzung des UTF-8 ...
Mit deutschen Umlauten wäre mir aber bislang nichts falsches aufgefallen (etv. habe ich noch nicht soviele preg_*() gebraucht und das bisschen japanisch, dass ich hier und da einbaue hat sich noch nicht beschwert ... naja .. über normales substr() schon ^^


PCRE hat ürbigens Support für UTF-8 ... wie es mit PHPs Library da aussieht ... müsste ich rausfinden ...

Geändert von Guradia (22.09.2005 um 18:13 Uhr).
Guradia ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 22.09.2005, 18:34   Nach oben    #3
robo47
BIN EIN KRASSA HELD!!!111
 
Benutzerbild von robo47
 
Registriert seit: 02.06.2005
Ort: weiher im tiefsten Odenwald
Beiträge: 1.170
Standard

hmm also mein testscript
haut mich falls ich da schon falsch rangegangen bin:

PHP-Code:
<?php
header
('Content-Type: text/html; charset=UTF-8');
mb_internal_encoding('UTF-8');

ob_start();
$string 'äöü äöü äöü';
echo 
'<h1>Normal</h1>'."\n";
echo 
'<hr>'."\n";
echo 
'string: '.$string.'<br />'."\n";
echo 
'strlen: '.strlen($string).'<br />'."\n";
echo 
'mb_strlen: '.mb_strlen($string).'<br /><hr>'."\n";
preg_match_all('~[äöü]{3,3}~',$string,$matches);
var_dump($matches);
$content ob_get_contents();
ob_end_clean();
echo 
utf8_encode($content);

ob_start();
$string utf8_encode($string);
echo 
'<h1>UTF8</h1>'."\n";
echo 
'<hr>'."\n";
echo 
'string: '.$string.'<br />'."\n";
echo 
'strlen: '.strlen($string).'<br />'."\n";
echo 
'mb_strlen: '.mb_strlen($string).'<br /><hr>'."\n";
preg_match_all('~['.utf8_encode('äöü').']{3,3}~',$string,$matches);
var_dump($matches);
$content ob_get_contents();
ob_end_clean();
echo 
$content;
echo 
'<hr><br />';
ob_start();
phpinfo();
$content ob_get_contents();
ob_end_clean();
echo 
utf8_encode($content);
?>

Irgendwie schmeist php das wohl intern eh um, weil die ausgabe trotz utf8-header beim var_dump nicht mehr stimmt.


unter php 5.0.5:

http://www.robo47.net/public/tests/utf8/utf8_test_1.php

sprich die ergebnisse die mit nem utf-8-string und nem non-utf-8string rauskommen sind verschieden, was ich nicht verstehe, hab ich irgendwo einfach noch nen logischen fehler drin ?

Drunter ist dann meine PHPINFO

mfg
robo47
robo47 ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 22.09.2005, 18:46   Nach oben    #4
Guradia
Benutzer
 
Benutzerbild von Guradia
 
Registriert seit: 18.08.2005
Ort: Düsseldorf
Beiträge: 57
Standard

Ja .. dein Ansatz ist von vorne bis hinten ... eher übel ^^
utf8_encode() allein ist schon überflüssig ... weil es mehr schaden anrichtet, als du denkst.

Hier das ganze mal funktionieorend ... sogar mit Japanisch ^^ ... beachte nur den Normal-Teil
Und vorallem den modfier "u"

EDIT: es hilft auch entsprechend, den Quellcode als UTF-8 zu speichern ^^

PHP-Code:
<?php

define
('MT_CHARSET''UTF-8');

switch (
MT_CHARSET)
{
    case 
'UTF-8' :
        
define('MT_CHARSET_DB''utf8');
        break;

    case 
'ISO-8859-1' :
        
define('MT_CHARSET_DB''latin1');
        break;
}

header('Content-Type: text/html; charset='.MT_CHARSET);

ini_set('mbstring.language',                'neutral');
ini_set('mbstring.internal_encoding',       'UTF-8');
ini_set('mbstring.http_input',              'auto');
ini_set('mbstring.http_output',             MT_CHARSET);
ini_set('mbstring.encoding_translation',    'On');
ini_set('mbstring.detect_order',            'auto');
ini_set('mbstring.substitute_character',    'none');
ini_set('mbstring.func_overload',           7);

ob_start('mb_output_handler');
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=<?php print MT_CHARSET?>" />
    <meta http-equiv="Content-Language" content="de" />
</head>

<body>

<?php


$string 
'äöü あいう äöü あいう äöü あいう';
echo 
'<h1>Normal</h1>'."\n";
echo 
'<hr>'."\n";
echo 
'string: '.$string.'<br />'."\n";
echo 
'strlen: '.strlen($string).'<br />'."\n";
echo 
'mb_strlen: '.mb_strlen($string).'<br /><hr>'."\n";
preg_match_all('~[äöüあいう]{3,3}~u',$string,$matches);
var_dump($matches);
$content ob_get_contents();
ob_end_clean();
echo 
$content;

ob_start('mb_output_handler');
echo 
'<h1>UTF8</h1>'."\n";
echo 
'<hr>'."\n";
echo 
'string: '.$string.'<br />'."\n";
echo 
'strlen: '.strlen($string).'<br />'."\n";
echo 
'mb_strlen: '.mb_strlen($string).'<br /><hr>'."\n";
preg_match_all('~[äöü]{3,3}~u',$string,$matches);
var_dump($matches);
$content ob_get_contents();
ob_end_clean();
echo 
$content;
echo 
'<hr><br />';
ob_start('mb_output_handler');
$content ob_get_contents();
ob_end_clean();
echo 
$content;


?>

</body>

Geändert von Guradia (22.09.2005 um 18:53 Uhr).
Guradia ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre 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 Aus

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Strings vergleichen über 2 Zeilen Garnele PHP-Programmierung 4 06.06.2007 17:13
Strings: \n durch \r\n ersetzen.. chrigu PHP-Programmierung 4 11.04.2007 14:35
Strings formatiert in Datei schreiben Lolly Allgemeine Java-Programmierung 1 07.06.2005 18:53
formatiertes Ausgeben von Strings Quakes Allgemeine Java-Programmierung 9 23.05.2005 21:14
Teil eines Strings löschen Quakes Allgemeine Java-Programmierung 3 18.04.2005 11:03


Alle Zeitangaben in WEZ +2. Es ist jetzt 20:37 Uhr.

Nach oben
Wir nutzen das Zend Framework, vBulletin (vBulletin v3.7.2, Copyright ©2000-2008, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.0.0) und vBSEO.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44