Str_Replace utilizzando JSON_Encode

di il
10 risposte

Str_Replace utilizzando JSON_Encode

Salve a tutti, non sono molto esperto sull'argomento ma sto cercando di tirare fuori dei dati da un db Mysql utilizzando json per creare una app con jquery mobile.
Riesco a leggere i dati ma purtroppo i caratteri speciali (come è,ò,à,à ....) non li accetta e mi restituisce un valore null.

Utilizzo il seguente codice!
Vorrei sapere come faccio a sostiuire le lettere speciali che vengono stampate a video.
E' possibile utilizzare un str_replace?

<?php
include 'config.php';

$sql = "SELECT * FROM table WHERE campo1 = 'thriller' ORDER BY id DESC";

try {
	$dbh = new PDO("mysql:host=$dbhost;dbname=$dbname", $dbuser, $dbpass);	
	$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
	$stmt = $dbh->query($sql);  
	$employees = $stmt->fetchAll(PDO::FETCH_OBJ);
	$dbh = null;
	echo '{"items":'. json_encode($employees) .'}'; 
} catch(PDOException $e) {
	echo '{"error":{"text":'. $e->getMessage() .'}}'; 
}
?>
Qualcuno potrebbe aiutarmi?
Grazie a tutti

10 Risposte

  • Re: Str_Replace utilizzando JSON_Encode

    E' lo stesso problema che ho avuto io qualche settimana fa.

    E' dovuto al fatto che se anche i dati nel db sono memorizzati in utf-8, mysql li trasmette in latin1.

    Io ho risolto con utf8_encode(stringa da convertire).

    ciao
  • Re: Str_Replace utilizzando JSON_Encode

    Grazie per il consiglio!
    Ora cerco qualche info.

    Ma dove mi consigni di inserirlo? devo creare una funzione apposta?

    Thanks!

    P.S.: scusate ma non sono un esperto
  • Re: Str_Replace utilizzando JSON_Encode

    Puoi anche annidarla in json_encode, in questo modo:
    
    json_encode(utf8_encode($employees));
    
    Comunque non farti problemi a chiedere, questo forum è fatto apposta, e comunque questa non era una domanda banale.

    ciao

    P.S.: se stampi i dati in una pagina html sarà necessario anche specificare il charset della pagina, così:
    
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    
  • Re: Str_Replace utilizzando JSON_Encode

    Grazie Mille!

    Ho eseguito alla lettera come consigliato ma questa volta non mi escono più i risultati ma la scritta "UNDEFINED" come se gli desse fastidio il utf8_encode.

    Di seguito, il codice php e html (premetto che in mezzo gira un file js)


    File .php
    <?php
    include 'config.php';
    
    $sql = "SELECT * FROM table WHERE campo1= 'thriller' ORDER BY id DESC";
    
    try {
    	$dbh = new PDO("mysql:host=$dbhost;dbname=$dbname", $dbuser, $dbpass);	
    	$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    	$stmt = $dbh->query($sql);  
    	$employees = $stmt->fetchAll(PDO::FETCH_OBJ);
    	$dbh = null;
    	echo '{"items":'.  json_encode(utf8_encode($employees)) .'}'; 
    } catch(PDOException $e) {
    	echo '{"error":{"text":'. $e->getMessage() .'}}'; 
    }
    
    ?>

    File .html
    
    <!DOCTYPE HTML>
    <html>
    <head>
    <title>Categoria Thriller</title>
    <meta name="viewport" content="width=device-width,initial-scale=1"/>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    
    <link rel="stylesheet" href="css/jquery.mobile-1.0rc1.min.css" />
    <link rel="stylesheet" href="css/styles.css" />
    </head>
        
    <body>
            
    <div id="employeeListPage" data-role="page" >
    
    	<div data-role="header" data-position="fixed">
    		<a href="index.html" data-role="button" data-icon="arrow-l">Back</a> 
    		<h1>Categoria Thriller</h1>
    	</div>
    
    	<div data-role="content">
             <ul id="employeeList" data-role="listview" data-filter="true" data-filter-placeholder="Cerca libro/autore..."></ul>
        </div>		
    
    </div>
    
    <script src="js/jquery.js"></script>
    <script src="js/jquery.mobile-1.0rc1.min.js"></script>
    <script src="js/employeelist.js"></script>
    <script src="js/employeedetails.js"></script>
    <script src="js/reportlist.js"></script>
    
    </body>
    
    </html>
    
    Non so se ho sbagliato qualcosa!
    Grazie ancora per l'aiuto
  • Re: Str_Replace utilizzando JSON_Encode

    UNDEFINED è un messaggio che lascia javascript.

    Secondo me il json risultante non è ben formato. Prova a togliere {items: } e vedi che succede.
  • Re: Str_Replace utilizzando JSON_Encode

    Ho provato a toglierlo ma non succede nulla anzi non riesce più a stampare i vari dati sull'html.

    Ho notato che se inserisco il utf8_encode (json_encode(utf8_encode($employees))) nel codice il risultato sul php è {"items":"Array"}.

    Non mi stampa più i dati come prima quando non lo avevo inserito (json_encode($employees)):
    ( {"items":[{"id":"305","catid":"1","title":"Il manipolatore","description":null,".........)

    Comunque grazie di nuovo!
    Non so se esiste un'altra soluzione o c'è qualche errore nel codice.
    Non conosco affatto json ma se ti può interessare il file js è il seguente.
    
    var serviceURL = "/services/";
    
    var employees;
    
    $(document).ready (function() {
    getEmployeeList();
    });
    
    $(document).delegate('#employeeListPage','pageshow', function(event) {
         getEmployeeList();
    });
    
    
    $('#employeeListPage').bind('pageinit', function(event) {
    	getEmployeeList();
    });
    
    function getEmployeeList() {
    	$.getJSON(serviceURL + 'getemployees.php', function(data) {
    		$('#employeeList li').remove();
    		employees = data.items;
    		$.each(employees, function(index, employee) {
    			$('#employeeList').append('<li><a href="employeedetails.html?id=' + employee.id + '">' +
    					'<img src="img/' + employee.img + '" width="80px" height="80px" />' +
    					'<h4>' + employee.title + '</h4>' +
    					'<p>' + employee.info1 + '</p>' +
    					'</a></li>');
    		});
    		$('#employeeList').listview('refresh');
    	});
    }
    
  • Re: Str_Replace utilizzando JSON_Encode

    A questo punto non so che dire.

    Purtroppo questo è un argomento su cui non sono molto ferrato neanche io.
  • Re: Str_Replace utilizzando JSON_Encode

    Grazie lo stesso, gentilissimo!
    Avevo cercato qualche funzione con str_replace ma non riesco a trovare nulla che fa al mio caso!
  • Re: Str_Replace utilizzando JSON_Encode

    Ho risolto il problema inserendo il seguente codice nella prima riga di codice all'interno del try {.
    $dbh = new PDO("mysql:host=$dbhost;dbname=$dbname", $dbuser, $dbpass, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8'"));
    Così finalmente riesco a vedere tutte le lettere accentate.
  • Re: Str_Replace utilizzando JSON_Encode

    Ah, buono a sapersi.
Devi accedere o registrarti per scrivere nel forum
10 risposte