Alternative zu mb_detect_encoding() ?
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
anpassen
argument
array
code
funktion
getrennte liste
http
kleine funktion
komma
list
liste
manual
null
ordern
parameter
string
treffer
url
verbesserung
windows
-
Hallo
ich habe eine kleine Funktion, die mir einen String zu UTF-8 umwandelt,
aber nur dann, wenn dieser String noch nicht bereits als UTF-8 vorliegt
(... das soll doppeltes codieren verhindern ...)
function convertToUTF8($str) { $enc = mb_detect_encoding($str, 'auto'); if ($enc && $enc != 'UTF-8') { return iconv($enc, 'UTF-8', $str); } else { return $str; } }
jetzt habe ich aber einen Webspace, bei dem die Funktion mb_detect_encoding() nicht verfügbar ist
Fatal error: Call to undefined function mb_detect_encoding() in ...
welche Alternative(n) gibt es, um zu prüfen, ob der String als UTF-8 vorliegt oder nicht ?
... bzw ... wie kann ich sonst sicher stellen, dass ein String nicht "doppelt" codiert wird ?
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Mögliche Lösungsvorschläge gibt es doch in der PHP Doku http://php.net/manual/de/function.mb-detect-encoding.php, man muss nur etwas scrollen.
-
Alternative zu mb_detect_encoding ... ja wenn iconv verfügbar ist :)
a) Alternative für mb_detect_encoding()
// ------------------------------------------- if(!function_exists('mb_detect_encoding')) { function mb_detect_encoding($string, $enc=null) { static $list = array('utf-8', 'iso-8859-1', 'windows-1251'); foreach ($list as $item) { $sample = iconv($item, $item, $string); if (md5($sample) == md5($string)) { if ($enc == $item) { return true; } else { return $item; } } } return null; } } // -------------------------------------------
B) Alternative für mb_convert_encoding()
// ------------------------------------------- if(!function_exists('mb_convert_encoding')) { function mb_convert_encoding($string, $target_encoding, $source_encoding) { $string = iconv($source_encoding, $target_encoding, $string); return $string; } } // -------------------------------------------
zu a)
Die Liste der Charsets$list = array('utf-8', 'iso-8859-1', 'windows-1251');
kann man ja nach Bedarf anpassen ... siehe: character encodings
PS: gibt sicher auch noch andere Alternativen :)
aber diese mit iconv funktionieren bei mir ganz gut.
EDIT:
die Funktion a) ist nicht 1:1 "richtig" nach-gebaut ...
denn mb_detect_encoding
erwartet ja 3 Argumente (Parameters) ...mb_detect_encoding($string, $encoding_list und $strict)
anstatt $encoding_list habe ich es aber nur mit ein einziger Charset $enc
encoding_list is list of character encoding. Encoding order may be specified by array or comma separated list string.
also.. hier der Code mit Verbesserung
... mit nur ein einzelner Charset als 2tes Argument (ohne Array oder Komma-Liste)
// ------------------------------------------- if(!function_exists('mb_detect_encoding')) { function mb_detect_encoding($string, $enc=null, $strict=false) { $out = null; if (!empty($enc) && $enc != 'null') { $sample = iconv($enc, $enc, $string); if (md5($sample) == md5($string)) { if ($strict === true) { $out = true; } else { $out = $enc; } } } else { static $list = array('utf-8', 'iso-8859-1', 'windows-1251'); ## http://www.php.net/manual/en/mbstring.supported-encodings.php foreach ($list as $item) { $sample = iconv($item, $item, $string); if (md5($sample) == md5($string)) { if ($strict === true) { $out = true; } else { $out = $item; } break; } } } return $out; } } // -------------------------------------------
ist aber immernoch nicht genau 1:1 ... weil im Original, weil als encoding
auch eine Liste mehrerer Charsets $encoding_list als Argument genutzt werden kann
dazu müsste man noch einbauen, ob $enc ein array oder eine Komma getrennte Liste als String ist,
und jenachdem ob davon ein Treffer kommt die Ausgabe (return / $out) anpassen
diese ausführlichere Variante habe ich allerdings nicht getestet,
und ist ja auch noch nicht 1:1 wie das Original (to-do: encoding_list)
.... aber (bei mir) geht's so wie oben (ohne "Verbesserung") ja auch erstmal
:)
Beitrag zuletzt geändert: 24.3.2013 15:49:02 von webparade -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage