Probleme bei UTF-8 und str_replace()
    
Antman
    
    
      
    
  - php
- 0 anarkist
 nicht angemeldet
 nicht angemeldetGuten Tag Forum,
in meiner mySQL DB sind alle Daten im utf-8 codiert.
Folgende str_replace Funktion bereitet nun Ärger:
function returnContacts($public, $company_id)
{
    $search = array("ä","ü","ö","ß");
    $replace = array("ae","ue","oe","ss");
$res =& $this->_db->query("
        SELECT id,
        CONCAT(c.name_f, ' ', c.name_l) AS name,
 CONCAT(c.name_f, '_', c.name_l) AS folder
        FROM contacts c, lnk_company_contact lcc
        WHERE (c.id = lcc.id_contact)
        AND   (c.public = '".$public."')
        AND   (lcc.id_company = '".$company_id."')
        ORDER BY c.name_f");
while($row =& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
            $row['folder'] = str_replace($search, $replace, strtolower($row['folder']));
            $employees[] = $row;
        }
return $employees;
    }
Steht in der DB ein "ä", so habe ich nach der Umwandlung ein schwarzes Viereck. Irgendwie scheint php unicode in einen anderen Zeichensatz umzuwandeln.
probiers mal damit:
<?php
header('Content-type: text/html; charset=utf-8');
htmlentities('string to be encoded', ENT_QUOTES, 'utf-8');
?>
http://de3.php.net/manual/de/function.htmlentities.php
gruß
anarkist
Habe das strlower() mal entfernt. Nun ist die schwarze Box weg.
Allerdings macht folgende Funktion str_replace() GARNICHTS.
PHP:
$search =  array("ä", "Ä", "ü", "Ü", "ö", "Ö", "ß");
$replace = array("ae", "ae", "ue", "ue", "oe", "o", "ss");
$row['folder'] = str_replace($search, $replace, $row['folder']);
Woran kann das liegen?
Moin!
Habe das strlower() mal entfernt. Nun ist die schwarze Box weg.
Allerdings macht folgende Funktion str_replace() GARNICHTS.
Simpel: Deine Umlaute werden nicht gefunden, weil du sie in $search nicht als UTF-8 codiert hast.
Wenn dein Editor kein UTF-8 beherrscht, hast du es natürlich schwer, dir aus den Unicode-Tabellen und den (eigentlich recht einfachen) Umsetzungsregeln für UTF-8 die passenden Zeichen selbst raussuchen zu müssen.
strtolower() funktioniert aus demselben Grunde nicht: Die Funktion erkennt die UTF-8-Zeichen nicht, sondern zerstört diese.
Du solltest dich deshalb mal über die "Multibyte String Functions" informieren: http://de3.php.net/mbstring Nur mit denen hast du überhaupt eine Chance, UTF-8 in PHP zerstörungsfrei zu bearbeiten (das reine durchreichen von Strings, deren Inhalt aber nicht verändert wird, geht mit PHP auch so sehr gut).
PHP:
$search = array("ä", "Ä", "ü", "Ü", "ö", "Ö", "ß");
- Sven Rautenberg
Hallo,
nun habe ich folgende php.ini in das Verzeichnis mit den Skripten gepackt und es klappt trotzdem nicht:
; Set default language
mbstring.language        = Neutral; Set default language to Neutral(UTF-8) (default)
;; Set default internal encoding
;; Note: Make sure to use character encoding works with PHP
mbstring.internal_encoding    = UTF-8  ; Set internal encoding to UTF-8
;; HTTP input encoding translation is enabled.
mbstring.encoding_translation = On
;; Set default HTTP input character encoding
;; Note: Script cannot change http_input setting.
mbstring.http_input           = pass    ; No conversion.
;; Set default HTTP output character encoding
mbstring.http_output          = pass    ; No conversion
mbstring.http_output          = UTF-8   ; Set HTTP output encoding to UTF-8
;; Set default character encoding detection order
mbstring.detect_order         = auto    ; Set detect order to auto
mbstring.detect_order         = UTF-8, ASCII, JIS; Specify order
Auf reiner sql Basis klappt es auch nicht:
$res =& $this->_db->query("
SELECT id,
REPLACE(REPLACE(REPLACE(REPLACE((CONCAT(c.name_f, ' ', c.name_l)), 'ö', 'oe'), 'ü', 'ue'), 'ä', 'ae'), 'ß', 'ss') AS name,
CONCAT(c.name_f, '_', c.name_l) AS folder
FROM contacts c, lnk_company_contact lcc
WHERE (c.id = lcc.id_contact)
AND   (c.public = '".$public."')
AND   (lcc.id_company = '".$company_id."')
ORDER BY c.name_f");
Aus dem gleichen Grund ?
Wer weiß die Lösung zu beiden Problemen ?