Probleme bei UTF-8 und str_replace()
Antman
- php
0 anarkist
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.
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 ?