2012-11-03 13 views
5

Na początku myślałem, że problem jest, gdy zwracam echo json_encode ($ row) z wywołania ajax, które wynika z ñ są zmienione na NULL. Ale po testach dowiedziałem się, że problem istnieje wcześniej.php ze znakami specjalnymi, takimi jak ñ

W pliku php próbki z:

$test = "Nuñez" 
echo $test 

wynik jest tylko Nuez

Rozglądałem się dookoła, ale żaden z sugerowanym pracy rozwiązań. Jak:

mb_internal_encoding('UTF-8'); 
mb_http_output('UTF-8'); 
mb_http_input('UTF-8'); 
mb_language('uni'); 
mb_regex_encoding('UTF-8'); 
ob_start('mb_output_handler'); 

lub <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> lub header('content-type: text/html; charset: utf-8');. I jeszcze kilka rozwiązań, o których już zapomniałem, wierz mi, że wiele próbowałem.

To tylko początek, mam nadzieję, że nie będzie problemu z mysql, ponieważ moja baza danych jest w utf-8, więc jest to mój zestaw znaków $ mysqli. Ale myślę, że nie mogę powiedzieć tego samego dla ajax json_encode. Ale nie martw się, jeden problem na raz. Czy ktokolwiek może mi pomóc. Wielkie dzięki!

problem rozwiązany miałem tylko ustawić "Kodowanie UTF-8" w Notepad ++, jak to było w "Kodowanie ANSI" wcześniej.

+1

czy jesteś pewien, że ten ciąg na pierwszym miejscu znajduje się w UTF-8, przed wysłaniem i po wysłaniu wszystkie nagłówki są w UTF-8? – Svetoslav

+0

Jak mogę to zrobić? Miałem 'header (" content-type: text/html; charset: utf-8 '); 'w moim kodzie, cokolwiek innego, co powinienem dodać? – Fred

Odpowiedz

5

dla mnie

$test = "Nuñez"; 
echo $test; 

pokazuje Nuñez

Możesz spróbować

$test = "Nuñez"; 
echo utf8_decode($test); 

lub

$test = utf8_encode("Nuñez"); 
echo utf8_decode($test); 
+0

Twoja funkcja działa poprawnie, nawet bez modyfikacji, jak sugerowałeś kodowanie utf8? To dziwne ... moje nie. Używam Firefoksa przy okazji. Widziałem - doskonale stąd, po prostu nie z moich własnych plików php. A rozwiązania działają dla jednego ciągu na raz, czy znasz jakieś obejście dla całej strony? – Fred

+0

Testowałem kod w FF i IE i działa to samo w obu przypadkach. Może będziesz musiał zmienić kodowanie znaków swojej strony .. sprawdź to [link w3.org dotyczący zmiany kodowania znaków na UTF-8] (http: // www.w3.org/International/questions/qa-changing-encoding) jeśli pomaga .. –

+2

Aha! Dzięki ... to zrobiło to dla mnie! Mam to z linku podanego przez ciebie "Jeśli pracujesz z ręcznie edytowanymi plikami, powinieneś użyć swojego edytora, aby zapisać plik w UTF-8" – Fred

2

Spróbuj

To działa dla mnie.

$test = "Nuñez"; 

echo html_entity_decode(htmlentities($test)); 
+0

tak to robi. dzięki, ale przykro mi, nie było jasne z moim pytaniem. Miałem nadzieję na rozwiązanie "całej strony". – Fred

+0

Czy chcesz używać tej funkcji do obsługi wielojęzykowej witryny? – Hkachhia

+0

Nieważne. Okazuje się, że problem polegał na tym, że zapisywałam plik za pomocą Notepad ++ w kodowaniu ANSI, nie w UTF-8. To jest źródło wszystkich moich problemów. Twoje rozwiązanie również działa, więc masz moje podziękowania i przegłosowanie. – Fred

1

po podłączeniu do mysql db ustawić kodowania UTF-8, jak ->

$sql_con = mysql_connect($sql_host, $sql_user, $sql_pass); 
mysql_query('SET NAMES utf8'); 
+2

'mysql_ *' jest przestarzałe !! – Christoph

+1

Tak, to jest to samo co moje i na moje pytania zadziałało, na szczęście! '$ mysqli = new mysqli ('localhost', 'root', 'password', 'database');' '$ mysqli-> set_charset (" utf8 ");' – Fred

0

rozważyć ustawienie default_charset ten pracował dla mnie

ini_set ('default_charset', 'UTF-8');

Powiązane problemy