utf 8 - Replace Special Characters function issue -
i using function found on stackoverflow replace special characters:
function toascii( $str ) { return strtr(utf8_decode($str), utf8_decode( 'ŠŒŽšœžŸ¥µÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝŐŰßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýÿőű'), 'sozsozyyuaaaaaaaceeeeiiiidnoooooouuuuyousaaaaaaaceeeeiiiionoooooouuuuyyou'); }
however, when try functionality in html not desired result. html code:
<?php $test = 'ŠŒŽšœžŸ¥µÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝŐŰßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýÿőű'; $test1 = toascii($test); ?> !doctype html public "-//w3c//dtd xhtml 1.0 transitional//en" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-us" lang="en-us"> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8" /> </head> <body> <?php echo $test."<br>"; echo $test1; ?> </body> </html>
result in browser:
ŠŒŽšœžŸ¥µÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝŐŰßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýÿőű uuuuuuuyuaaaaaaaceeeeiiiidnoooooouuuuyuusaaaaaaaceeeeiiiionoooooouuuuyyuu
any ideas why characters shown u
instead of desired one?
note: prefer avoid using setlocale
since required additional changes in code.
when use strtr() 3 arguments, operates bytes , not multibyte characters (see http://php.net/manual/en/function.strtr.php#111270). instead have give array contains exact mapping.
this solution case:
<?php function mbstringtoarray( $str ) { return preg_split('//u', $str, -1, preg_split_no_empty); } function toascii( $str ) { $map = array_combine( mbstringtoarray('ŠŒŽšœžŸ¥µÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝŐŰßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýÿőű'), mbstringtoarray('sozsozyyuaaaaaaaceeeeiiiidnoooooouuuuyousaaaaaaaceeeeiiiionoooooouuuuyyou') ); return strtr($str,$map); } $test = 'ŠŒŽšœžŸ¥µÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝŐŰßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýÿőű'; $test1 = toascii($test); ?> <!doctype html public "-//w3c//dtd xhtml 1.0 transitional//en" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-us" lang="en-us"> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8" /> </head> <body> <?php echo $test."<br>"; echo $test1; ?> </body> </html>
output:
ŠŒŽšœžŸ¥µÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝŐŰßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýÿőű sozsozyyuaaaaaaaceeeeiiiidnoooooouuuuyousaaaaaaaceeeeiiiionoooooouuuuyyou
Comments
Post a Comment