PHP Forum

PHP Forum (http://www.selfphp.de/forum/index.php)
-   PHP für Fortgeschrittene und Experten (http://www.selfphp.de/forum/forumdisplay.php?f=13)
-   -   Frage allgemein zu RegExp und match against (http://www.selfphp.de/forum/showthread.php?t=21671)

saidbuchari 21.06.2009 13:50:21

Frage allgemein zu RegExp und match against
 
Hay alle zusammen


Ich mache mir ne Suche für Daten die in einer Mysql datenbank stehen, die daten sind in mehreren sprachen unter anderem auch in arabisch türkisch chinesisch etc das alles realisiere ich mir mit preg_match_all und bastel mir je nach treffern die sql abfrage zusammen. Ich arbeite mit UTF-8 codierten texten die in der mysql Datenbank stehen. Soweit so gut funktioniert auch alles schonmal ganz gut.
Jetzt hab ich zwei sachen die mich stören und ich weiss nicht woran es liegt.
Mein RegExp für eine normale Suchwörter Getrennte abfrage

PHP-Code:

/^[^d-+][^d]+/miu 

Wenn der Nutzer normale Suchwörter eingibt im Deutschen zum beispiel "Auto Hallo Welt König" werden alle texte ausgegeben in denen diese worte vorkommen. Allerdings wird König z.b genau wie Konig behandelt. Woran liegt das?
meine zweite Frage:

wenn man Wörter hat mit einem ' drin wird nicht gematcht obwohl das wort genauso in der Datenbank im Text vorkommt BSP:

Suche nach Peter's Auto
Text in datenbank ... Peter's Auto ist rot...

ergibt keine Treffer. In der Datenbank steht der Eintrag genauso ohne \ slashes

Woran liegt das?
Liebe Grüsse
Said

saidbuchari 23.06.2009 12:51:32

AW: Frage allgemein zu RegExp und match against
 
keiner ne idee? abfragen tu ich mit match against und fulltext

Small-Talk 23.06.2009 23:20:59

AW: Frage allgemein zu RegExp und match against
 
Hi saidbuchari,

Zu deiner ersten Frage:
Das liegt an den MySQL-Collation-Set. Lese dir dazu mal das hier durch:
http://dev.mysql.com/doc/refman/5.1/...code-sets.html

Zu deiner 2. Frage:
Das liegt auch an MySQL, da du ja mit fts suchst wirst du evtl solche Sonderzeichen nicht finden, da MySQL die nicht mit fts indiziert. Evtl schafft "IN BOOLEAN MODE" da Abhilfe.

saidbuchari 24.06.2009 13:55:28

AW: Frage allgemein zu RegExp und match against
 
Danke für deinen Ansatz.
Also meine EInträge in der Datenbank sind in utf8_unicode_ci
Es sind ganze Bücher in der Datenbank die ich so nach udn nach importiert habe. Das wär echt schlecht wenn das nicht geht. mh gibt es ne möglichkeit das das trotzdem geht vielleicht das ich die bücher einfach nochmal importiere und dann mit einem addslashes beim eintragen? oder das ' ersetzen lassen durch \' aber eigentlich kanns daran nicht liegen hab ja uch alles per mysql_real_escape_strings in die datenbank eingetragen da müsste er das ja automatisch machen und die suche läuft auh über mysql_real_escape_strings.
IN BOOLEAN MODE ist aktiviert

mh was muss ich einstellen damit ö auch nur auf ö matcht und ich ' in den texten benutzen kann?

Small-Talk 24.06.2009 18:50:49

AW: Frage allgemein zu RegExp und match against
 
Ob deine Texte richtig in der Db stehen siehst du ja, wenn du sie abruft.

Zitat:

For any Unicode character set, operations performed using the _general_ci collation are faster than those for the _unicode_ci collation. For example, comparisons for the utf8_general_ci collation are faster, but slightly less correct, than comparisons for utf8_unicode_ci. The reason for this is that utf8_unicode_ci supports mappings such as expansions; that is, when one character compares as equal to combinations of other characters. For example, in German and some other languages “ß” is equal to “ss”. utf8_unicode_ci also supports contractions and ignorable characters. utf8_general_ci is a legacy collation that does not support expansions, contractions, or ignorable characters. It can make only one-to-one comparisons between characters.

To further illustrate, the following equalities hold in both utf8_general_ci and utf8_unicode_ci (for the effect this has in comparisons or when doing searches, see Section 9.1.6.7, “Examples of the Effect of Collation”):

Ä = A
Ö = O
Ü = U

A difference between the collations is that this is true for utf8_general_ci:

ß = s

Whereas this is true for utf8_unicode_ci:

ß = ss

Demnach wäre utf8_unicode_ci ja eigentlich richtig. (ä = ae)

Kannst du die SQL's (und den PHP-Teil) mal posten ?


Alle Zeitangaben in WEZ +2. Es ist jetzt 19:48:23 Uhr.

Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.