Ergebnis 1 bis 9 von 9

Thema: UTF8 und LIKE

  1. #1
    andiwini ist offline Neuer Benutzer
    Registriert seit
    06.04.2011
    Beiträge
    6

    Standard UTF8 und LIKE

    hallöchen,

    ich nehme an, dass mein problem wohl eine rechte anfängerfrage ist, aber dennoch benötige ich hilfe:

    ich betreibe eine pg-datenbank mit einem php-webprogramm. die db ist utf8-encoded. ich möchte nun mit sql eine %LIKE%-query absetzen, in der nach umlauten gesucht wird. egal was ich anstelle, ein vorhandenes ergebnis wird in php nicht gefunden.


    ein paar details:
    SHOW server_encoding; UTF8
    SHOW client_encoding; UNICODE

    die zeile in der datenbank sieht so aus:
    id; bez
    3;"Broschüre"


    die query in php:
    PHP-Code:
    $result pg_query('SELECT * FROM schema.table WHERE lower(bez) LIKE \'%'.strtolower($_POST['search_tag']).'%\' ORDER BY id'); 
    $_POST['search_tag'] ist der eingegebene Suchbegriff, in diesem Fall 'Broschüre'.

    ich habe auch versucht, die query wie folgt zu definieren:
    PHP-Code:
    $result pg_query('SELECT * FROM schema.table WHERE lower(bez) LIKE \'%'.utf8_encode(strtolower($_POST['search_tag'])).'%\' ORDER BY id'); 
    jedoch kommt bei keinem von beiden ein Resultat zurück (auch keine fehler). dieselbe query in pgadmin liefert ein passendes ergebnis zurück.


    wo liegt der fehler?



    danke für alle hinweise
    Geändert von andiwini (10.06.2011 um 18:25 Uhr)

  2. #2
    akretschmer ist offline Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Dresden
    Beiträge
    5.472

    Standard

    Zitat Zitat von andiwini Beitrag anzeigen
    hallöchen,

    ich nehme an, dass mein problem wohl eine rechte anfängerfrage ist, aber dennoch benötige ich hilfe:

    ich betreibe eine pg-datenbank mit einem php-webprogramm. die db ist utf8-encoded. ich möchte nun mit sql eine %LIKE%-query absetzen, in der nach umlauten gesucht wird. egal was ich anstelle, ein vorhandenes ergebnis wird in php nicht gefunden.


    ein paar details:
    SHOW server_encoding; UTF8
    SHOW client_encoding; UNICODE

    die zeile in der datenbank sieht so aus:
    id; bez
    3;"Broschüre"


    die query in php:
    PHP-Code:
    $result pg_query('SELECT * FROM schema.table WHERE lower(bez) LIKE \'%'.strtolower($_POST['search_tag']).'%\' ORDER BY id'); 
    $_POST['search_tag'] ist der eingegebene Suchbegriff, in diesem Fall 'Broschüre'.

    ich habe auch versucht, die query wie folgt zu definieren:
    PHP-Code:
    $result pg_query('SELECT * FROM schema.table WHERE lower(bez) LIKE \'%'.utf8_encode(strtolower($_POST['search_tag'])).'%\' ORDER BY id'); 
    jedoch kommt bei keinem von beiden ein Resultat zurück (auch keine fehler). dieselbe query in pgadmin liefert ein passendes ergebnis zurück.


    wo liegt der fehler?



    danke für alle hinweise
    Was kommt denn raus, wenn Du den String, den pg_query() bekommt, mal mit echo oder so ausgibst?

    Btw.: das schaut mächtig nach SQL-Injection - enabled aus ...

    Andreas
    --
    ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
    https://www.xing.com/profile/Andreas_Kretschmer7

  3. #3
    andiwini ist offline Neuer Benutzer
    Registriert seit
    06.04.2011
    Beiträge
    6

    Standard

    hi,

    gar nichts, das result ist leer, so als ob die zeile nicht existieren würde:

    PHP-Code:
     echo '#';print($result); echo '#'
    wird zu
    HTML-Code:
    ##
    keine sorge wegen sql_injection, das ist nur ein hobby-projekt...

  4. #4
    akretschmer ist offline Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Dresden
    Beiträge
    5.472

    Standard

    Zitat Zitat von andiwini Beitrag anzeigen
    hi,

    gar nichts, das result ist leer, so als ob die zeile nicht existieren würde:

    PHP-Code:
     echo '#';print($result); echo '#'
    wird zu
    HTML-Code:
    ##
    keine sorge wegen sql_injection, das ist nur ein hobby-projekt...
    [ ] Du hast verstanden.

    was kommt raus bei

    Code:
    echo 'SELECT * FROM schema.table WHERE lower(bez) LIKE \'%'.strtolower($_POST['search_tag']).'%\' ORDER BY id';
    einfach um das fertige SQL zu sehen, was an den Server geht.

    Andreas
    --
    ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
    https://www.xing.com/profile/Andreas_Kretschmer7

  5. #5
    andiwini ist offline Neuer Benutzer
    Registriert seit
    06.04.2011
    Beiträge
    6

    Standard

    sorry, mein fehler...

    ohne utf8_encode:
    SELECT * FROM schema.table WHERE lower(bez) LIKE '%brosch�re%' ORDER BY id

    mit utf8_encode:
    SELECT * FROM schema.table WHERE lower(bez) LIKE '%broschã¼re%' ORDER BY id


    im suchfeld wird 'Broschüre' eingegeben, wie kann ich es erreichen, dass die query schlussendlich so aussieht:

    PHP-Code:
    SELECT FROM druckok.tb_kat WHERE lower(bezLIKE '%broschüre%' ORDER BY id 
    das ist die query die funktioniert, aber weder mit noch ohne utf8_encode kommt das raus.
    Geändert von andiwini (10.06.2011 um 18:52 Uhr)

  6. #6
    akretschmer ist offline Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Dresden
    Beiträge
    5.472

    Standard

    Zitat Zitat von andiwini Beitrag anzeigen
    sorry, mein fehler...

    ohne utf8_encode:
    SELECT * FROM schema.table WHERE lower(bez) LIKE '%brosch�re%' ORDER BY id

    mit utf8_encode:
    SELECT * FROM schema.table WHERE lower(bez) LIKE '%broschã¼re%' ORDER BY id


    gibts irgendwelche einstellungen bei pg oder php, die man treffen muss? hab ich was vergessen/falsch gemacht?
    client_encoding muß dem entsprechen, was Dein PHP da macht. Scheinbar ist es kein UTF8 / UNICODE.


    Andreas
    --
    ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
    https://www.xing.com/profile/Andreas_Kretschmer7

  7. #7
    andiwini ist offline Neuer Benutzer
    Registriert seit
    06.04.2011
    Beiträge
    6

    Standard

    hmm,

    wie kann ich feststellen, was php macht? ich verwende die funktion utf8_encode, die laut php-manual einen string in utf8 umwandelt...

    ich habs jetzt mit dem hier probiert:
    PHP-Code:
    $query iconv("ISO-8859-1""UTF-8"$query); 
    damit kommt folgendes raus:
    SELECT * FROM schema.table WHERE lower(bez) LIKE '%broschã¼re%' ORDER BY id

    kann man client_encoding umändern, damit es funktioniert? wie und auf was kann man client_encoding ändern?

  8. #8
    akretschmer ist offline Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Dresden
    Beiträge
    5.472

    Standard

    Zitat Zitat von andiwini Beitrag anzeigen
    hmm,

    wie kann ich feststellen, was php macht? ich verwende die funktion utf_encode, die laut php-manual einen string in utf8 umwandelt...

    ich habs jetzt mit dem hier probiert:
    PHP-Code:
    $query iconv("ISO-8859-1""UTF-8"$query); 
    damit kommt folgendes raus:
    SELECT * FROM druckok.tb_kat WHERE lower(bez) LIKE '%broschã¼re%' ORDER BY id

    kann man client encoding umändern, damit es funktioniert? wie und aus was kann man client_encoding ändern?
    schau in den Quelltext der Website (Ctrl-U im Firefox). client_encoding kannst Du innerhalb der Session, in der Du mit der DB verbunden bist, setzen. Vermutlich mal schon bei Aufbau der Verbindung, schau mal in die Doku, ich bin kein PHP-Freak...

    Andreas, Feierabend!
    --
    ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
    https://www.xing.com/profile/Andreas_Kretschmer7

  9. #9
    ads
    ads ist offline Super-Moderator
    Registriert seit
    08.02.2006
    Ort
    MD
    Beiträge
    4.056

    Standard

    Du musst hier verschiedene Encodings beachten.

    - Das Encoding deiner Webseite.
    - Das Encoding der hereinkommende Daten von der Webseite.
    - Das Encoding in deiner Datenbank.
    - Das Encoding deiner Datenbankverbindung.

    Die sind alle unabhängig voneinander und müssen übereinstimmen.
    Xandrian: Kurz gesagt: Du hast ein falsches Konzept und willst nicht auf ads hören

    Jetzt NEU: PostgreSQL - Datenbankpraxis für Anwender, Administratoren und Entwickler

    PostgreSQL Service & Support

Ähnliche Themen

  1. utf8-db in Latin1 umwandeln
    Von Kai-Behncke im Forum Allgemeines
    Antworten: 1
    Letzter Beitrag: 28.07.2010, 18:48
  2. Falsche Sortierreihenfolge bei UTF8
    Von revolverdeveloper im Forum Konfiguration
    Antworten: 4
    Letzter Beitrag: 28.09.2009, 10:06
  3. Frage Dump mit UTF8 als encoding
    Von nixdorf im Forum Allgemeines
    Antworten: 5
    Letzter Beitrag: 21.04.2009, 09:05
  4. utf8 nach latin9
    Von mili im Forum Allgemeines
    Antworten: 1
    Letzter Beitrag: 30.10.2008, 17:17
  5. UTF8 und PHP
    Von Sy- im Forum Allgemeines
    Antworten: 24
    Letzter Beitrag: 13.01.2006, 15:15

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Links: Tobias Bauer - IT- und Funkdienstleistungen   -   Bilderrahmen-kaufen.de - Der Onlineshop für Bilderrahmen & Fotorahmen   -   Funkforum