Forum Doku Wiki Blog

Forumsarchiv 2004, Oktober
Probleme bei UTF-8 und str_replace()

archivierte Beiträge lesen

  1. (PHP) Probleme bei UTF-8 und str_replace() von Antman, 01. 10. 2004, 15:49

Probleme bei UTF-8 und str_replace()

Der folgende Beitrag wurde am 01. 10. 2004, 15:49 Uhr von Antman veröffentlicht.

Guten 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.

Probleme bei UTF-8 und str_replace()

Der folgende Beitrag wurde am 01. 10. 2004, 17:15 Uhr von anarkist veröffentlicht.

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

Probleme bei UTF-8 und str_replace()

Der folgende Beitrag wurde am 01. 10. 2004, 17:53 Uhr von Antman veröffentlicht.

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?

Probleme bei UTF-8 und str_replace()

Der folgende Beitrag wurde am 02. 10. 2004, 01:04 Uhr von Sven Rautenberg veröffentlicht.

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

Probleme bei UTF-8 und str_replace()

Der folgende Beitrag wurde am 04. 10. 2004, 13:20 Uhr von Antman veröffentlicht.

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

Probleme bei UTF-8 und str_replace()

Der folgende Beitrag wurde am 04. 10. 2004, 15:14 Uhr von Antman veröffentlicht.

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 ?

© 1998-2013 SELFHTMLImpressumSoftware: Classic Forum 3.4