Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    replace caratteri accentati e charset mysql

    ho un problema molto strano e non riesco a capire a cosa sia dovuto.
    ho creato una funzione elementare per pulire una stringa dai caratteri accentati e sostituirli con i relativi caratteri non accentati:
    codice:
    function URLFriendly($field) {
    	$chars = array("à", "é", "é", "ì", "ò", "ù");
    	$replacer = array("a", "e", "e", "i", "o", "u");
    	$field = str_replace($chars, $replacer, $field);
    	return strtolower($field);
    }
    il problema è semplice: non sostituisce nulla.
    la cosa assurda però è questa:
    se io sostituisco $replacer con :

    codice:
    $replacer = array("K", "e", "e", "i", "o", "u");
    tutte le à dovrebbero diventare K..... invece tutte le a (non accentate) diventano K e le accentate rimangono uguali....
    Questo succede solo con campi prelevati da db (che ha charset latin1_swedish_ci).. se invece la stringa la inserisco 'a mano' nel codice php, la funzione sopra va.

    deduco che il problema sia il charset del db o quantomeno la stringa in se... ma io la stringa a video la vedo correttamente.. nel db la vedo correttamente .... ho provato a cambiare vari charset ma non cambia nulla.. ho provato a cambiare la stringa più volte..

    qualcuno ha qualche suggerimento?


  2. #2
    qualcuno saprebbe dire invece perchè così funziona?

    codice:
    $chars = array('ŕ', 'č', 'é', 'ě', 'ň', 'ů');
    $replacer = array('a', 'e', 'e', 'i', 'o', 'u');

  3. #3
    Utente di HTML.it L'avatar di Grino
    Registrato dal
    Oct 2004
    Messaggi
    739
    Il motivo è semplice, il database, che utilizza come charset latin1_swedish_ci, utilizza 2 byte per ogni carattere, mentre PHP nelle sue stringhe utilizza un byte per ogni carattere.

    Quello che hai fatto è stato di individuare un carattere unicode, il cui byte basso equivale al carattere accentato interpretato con il singolo byte utilizzato da PHP.

    Dove studiare:
    http://www.php.net/manual/en/language.types.string.php - La sezione "Details of the String Type"

    Siamo sempre troppo gelosi delle nostre grandi piccole opere! - Grino inedito.
    Lavori e Lavoretti

  4. #4
    Originariamente inviato da Grino
    Il motivo è semplice, il database, che utilizza come charset latin1_swedish_ci, utilizza 2 byte per ogni carattere, mentre PHP nelle sue stringhe utilizza un byte per ogni carattere.

    Quello che hai fatto è stato di individuare un carattere unicode, il cui byte basso equivale al carattere accentato interpretato con il singolo byte utilizzato da PHP.

    Dove studiare:
    http://www.php.net/manual/en/language.types.string.php - La sezione "Details of the String Type"

    chiarissimo
    ora mi studio per bene il link, grazie 1000 per la segnalazione..

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.