2014-10-01 3 views
1

나는 이것을 1 주일 이상 풀려고 노력해 왔습니다.PHP를 사용하여 JSON 결과로 UTF8 인코딩

나는 데이터베이스 utf8_general_ci이 있습니다.

내가 JSON 편대가 PHP를 사용의 결과를 인쇄

는 문자 인코딩 UTF8 수 없습니다. 데이터베이스에 저장

값은 다음

아랍어 언어에 결과가

입니다 인쇄 내가

db.php를

<?php 

$DBhost = "xx.xx.xx.x"; 
$DBusername = "username"; 
$DBpassword = "password"; 
$db_name = "bdname"; 

$connect = mysql_connect("$DBhost", "$DBusername", "$DBpassword")or die("cannot connect"); 
mysql_select_db("$db_name")or die("cannot select DB"); 

?> 

및 코드를 사용하고 코드되어 있습니다

show.php

출력 7백45경1천5백15조5백36억9천1백36만3천2백10
<?php 
include('db.php'); 

$tbl_name = "table_name"; 

mysql_set_charset('utf8'); 

$sth = mysql_query("SELECT * FROM $tbl_name"); 

$rows = array(); 

while($r = mysql_fetch_assoc($sth)) { 
    $rows[] = array_map('utf8_encode', $r); 
} 

print json_encode($rows); 
?> 

예 :

[{ "ID": "4", "news_id": "1", "자막": "\ u00c3 \ u0083 \ u00c3 \ u008e \ u00c3 \ u0088 \ u00c3 \ u0087 \ u00c3 \ u0091 \ u00c3 \ u0087 \ u00c3 \ u00a1 \ u00c3 \ u0088 \ u00c3 \ u0098 \ u00c3 \ u00a6 \ u00c3 \ u00a1 \ u00c3 \ u0089 \ u00c3 \ u0087 \ u00c3 \ u00a1 \ u00c3 \ u00a3 \ u00c3 \ u008f \ u00c3 \ u0091 \ u00c3 \ u0093 \ u00c3 \ u00c3 \ u0089 \ u00c3 \ u00a1 \ u00c3 \ u008e \ u00c3 \ u0087 \ u00c3 \ u00a3 \ u00c3 \ u0093 \ u00c3 \ u0089 \ u00c3 \ 내 공학자 이해 무엇 u00a1 \ u00c3 \ u009f \ u00c3 \ u0091 \ u00c3 \ u0089 \ u00c3 \ u0087 \ u00c3 \ u00a1 \ u00c3 \ u009e \ u00c3 \ u008f \ u00c3 \ u00a3 "

/U00라틴UTF8 인 H는 의 iconv같이 라틴UTF8 변환하는 /U0와하지 두 0

시도 다른 방법을 시작해야 decode_jsonmysql_set_charsetlatin1으로 변경하고 심지어 그것을 제거하고 을 사용하여 html 헤더를 추가했습니다. TF8, latin1 및 windows-1526 charset도 같은 결과를 얻습니다. null캡션 출력에 대한 결과가 나타납니다.

여기 선택의 여지가있어 정말

어떤 생각을 어떻게 해야할지 몰라?

+0

mbstring 함수, http://php.net/manual/en/ref.mbstring.php 또는 좋은 자습서 http://www.ar-php.org/faq-php-arabic을 테스트 했습니까? html –

+0

이러한 이스케이프 시퀀스가 ​​* 잘못된 문자를 나타내는가 아니면 다른 이스케이프 시퀀스를 사용하여 비 ASCII 문자를 나타낼 것입니까? – Quentin

+0

@Quentin 내가 결과를 utf8에 넣고 싶습니다 – aLFaRSi

답변

0

mysql_set_charset('utf8');을 사용하면인코딩 된 데이터를 MySQL 데이터베이스에서 가져올 수 있습니다. 이 데이터에 array_map('utf8_encode', $r)을 사용하지 마십시오. 이것은 실수입니다. 올바른 내용은 다음과 같습니다.

while($r = mysql_fetch_assoc($sth)) { 
    $rows[] = $r; 
} 
+0

도 시도해보세요.이 또한 작동하지 않습니다. – aLFaRSi

2

.당신로 json_encode에 PHP 파일

<?php 
header('Content-type: application/json; charset=UTF-8'); 
... 

및 추가 'JSON_UNESCAPED_UNICODE은'

echo json_encode($response, JSON_UNESCAPED_UNICODE); 

) (불필요한 utf8_encode를 제거해야합니다.