Alan Alan - 1 year ago 139
PHP Question

Convert 2 similarly-looking German characters of different kinds to same ASCII string in PHP

I have these two strings:

$str1 = 'Ö';
$str2 = 'Ö';
$e1 = mb_detect_encoding($str1);
$e2 = mb_detect_encoding($str2);
echo 'e1: '.$e1.', e2: '.$e2;

the result is:

string(3) "Ö"
string(2) "Ö"
e1: UTF-8, e2: UTF-8

It seems that they are not only German characters but also each of them is different so converting them to ASCII this way

PHP: Replace umlauts with closest 7-bit ASCII equivalent in an UTF-8 string

doesn't produce equal results. Is there a way to convert both of these strings to one of these ASCII forms

I know that maybe I could copy Ö from both and include in
search and replace array but I don't know how to reproduce all the charactes encoded the same way the first Ös are.

Answer Source

You could first convert your input to utf-8 using iconv and then apply your conversion to ASCII. To detect the current encoding you can use mb_detect_encoding.

$aUTF8 = iconv(mb_detect_encoding($a, 'UTF-8, ISO-8859-1', true), 'UTF-8', $a);
$bUTF8 = iconv(mb_detect_encoding($b, 'UTF-8, ISO-8859-1', true), 'UTF-8', $b);

$aASCII = iconv("utf-8", "ascii//TRANSLIT", $aUTF8);
$bASCII = iconv("utf-8", "ascii//TRANSLIT", $bUTF8);

Please note that you might have to add additional encodings to the encoding list of mb_detect_encoding.