Pagina 1 di 2

Sistemare lettere accentate

Inviato: 08/10/2015, 19:49
da enzomaxxtro
Salute a tutti...ho bisogno di nuovo del vostro aiuto. Premetto che ho cercato nel forum e su internet e tutte le soluzioni trovate non fanno al mio caso...che vado ad esporvi

ho una form con un campo testuale (textarea di html) nella quale va scritto un testo (ovviamente :roll: )
tale testo tramite le funzioni già pronte suggeritemi da voi (tipo la "generate_text_for_storage") riempie la pagina del topic del forum phpbb...fin qui niente di strano...se non fosse per le lettere accentate che non permettono l'invio del testo e dunque il topic resta vuoto.

Ho già risolto la faccenda dell'apostrofo (') così:

Codice: Seleziona tutto

$testo= str_replace("\'", "' ",$testo);
ma per lettere accentuate ho provato di tutto:

Codice: Seleziona tutto

$testo= iconv("UTF-8","ASCII//TRANSLIT", $testo);

Codice: Seleziona tutto

$testo= iconv("UTF-8","ASCII//TRANSLIT//IGNORE", $testo);

Codice: Seleziona tutto

$testo= str_replace("è", "&egrave",$testo);
...e altre che non ricordo nemmeno più

per inviare il testo uso queste routine:

Codice: Seleziona tutto

$my_text = utf8_normalize_nfc($testo, '', true);
generate_text_for_storage($my_text, $uid, $bitfield, $options, true, true, true);
alla prima riga ho provato ad usare anche iconv....

insomma non ne vengo a capo....vorrei o trascrivere le lettere accentate così come sono o trasformarle con l'apostrofo tipo e'

Re: Sistemare lettere accentate

Inviato: 09/10/2015, 15:04
da Sir Xiradorn
Hai provato a usare la funzione htmlentities($testo) ?

Re: Sistemare lettere accentate

Inviato: 09/10/2015, 15:13
da Micogian
Potrebbe dipendere dalla connessione al DB, io uso questa stringa dopo la connessione.

Codice: Seleziona tutto

$result = mysql_query("SET NAMES 'utf8'");

Re: Sistemare lettere accentate

Inviato: 09/10/2015, 23:10
da enzomaxxtro
ho provato anche mettendo nella prima riga del file la stringa
"header('Content-type: text/html; charset=UTF-8');"
provo anche i vostri suggerimenti e farò sapere.
Tra le mille prove ho visto che avevo già aggiunto

Codice: Seleziona tutto

mysql_query("SET NAMES 'utf8'");  
dopo la connessione al db

.
Sir Xiradorn ha scritto:Hai provato a usare la funzione htmlentities($testo) ?
ho provato ma nulla...risultano sempre i punti interrogativi al posto delle lettere con l'accento...
uso questa stringa per prendere il testo dalla textarea,può essere che non va bene?

Codice: Seleziona tutto

  $testo = mysql_real_escape_string(request_var('Testo', ''));
tutto è impostato su UTF8..l'intero db è codificato con UTF8 general

Re: Sistemare lettere accentate

Inviato: 10/10/2015, 2:53
da Sir Xiradorn
Hai anche provato con le regex e le funzioni preg?

Re: Sistemare lettere accentate

Inviato: 10/10/2015, 11:55
da enzomaxxtro
Sir Xiradorn ha scritto:Hai anche provato con le regex e le funzioni preg?
no...le espressioni regolari non le avevo considerate...le mastico poco...mi puoi dare qualche suggerimento?

Re: Sistemare lettere accentate

Inviato: 10/10/2015, 13:05
da Micogian
Anch'io uso delle textarea e il caricamento dei dati lo faccio con una funzione che apre un'altra pagina.
I problemi principali sono gli apostrofi e il carattere & che risolvo in questo modo:

Codice: Seleziona tutto

function Conferma_copia(t, att,tit_pic,cap_pic,tit_alb,aid,id_sp,path_d,path_f,path_a,nome,cid,idp,aut,cap_extra) {
var $topic_id 	= t;
var $attach_id 	= att;
var $tit_pic 	= tit_pic.replace("&","///") ;
var $cap_pic 	= cap_pic.replace("'","''") ;
....................
In pratica sostituisco il carattere & con /// e poi faccio l'inverso nel file di destinazione.
Per gli apostrofi trasformo 1 apostrofo in 2 apostrofi.

Nel file di destinazione, quello che effettivamente fa l'aggiornamento del DB riporto le barre /// al carattere & e per il testo uso la funzione addslashes():

Codice: Seleziona tutto

$title_pic 			= str_replace("///","&",$_GET['tit_pic']) ;   	// Titolo della foto;
$caption_pic_tmp	= addslashes($_GET['cap_pic']) ;   	// descrizione della foto ;
$caption_extra_pic	= addslashes($_GET['cap_extra']) ;  // descrizione extra della foto ;
PS: la funzione phpbb che salva il testo da inserire nel DB è "generate_text_for_storage"
https://wiki.phpbb.com/Generate_text_for_storage

Re: Sistemare lettere accentate

Inviato: 10/10/2015, 16:28
da enzomaxxtro
un po' criptico come sintassi...ma se non erro non c'è la sostituzione delle lettere accentate...è così? secondo me l'errore sta nel come prelevo il testo dalla textarea...perchè ad esempio usando la semplice funzione htmlentities() e scrivendo il testo con le lettere accentate vengono fuori bene poi nel topic....ma quando prelevo dalla textarea no..

per prendere il testo uso questa routine:

Codice: Seleziona tutto

$testo1 = mysql_real_escape_string(request_var('Testo', ''));
poi aggiusto sia i ritorni a capo che gli apostrofi

Codice: Seleziona tutto

$testo = str_replace("\\n", "<br />",$testo1);
$testo = str_replace("\'", "' ",$testo );
a furia di provare questo e quello mi sa che ho incasinato tutto...
nell'intestazione del file ho tutto questa popò di roba...ma serve tutta?

Codice: Seleziona tutto

header('Content-type: text/html; charset=UTF-8');

define('IN_PHPBB', true);
$phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : './';
$phpbb_admin_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : './';
$phpEx = substr(strrchr(__FILE__, '.'), 1);
include($phpbb_root_path . 'common.' . $phpEx);
include($phpbb_root_path . 'includes/functions_posting.' . $phpEx);
include("langsettings.php");
include($phpbb_root_path . 'includes/functions_display.' . $phpEx);
include($phpbb_root_path . 'includes/message_parser.' . $phpEx);

Re: Sistemare lettere accentate

Inviato: 10/10/2015, 18:27
da Micogian
La parte che riguarda la connessione a phpbb è questa

Codice: Seleziona tutto

define('IN_PHPBB', true);
$phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : './';
$phpEx = substr(strrchr(__FILE__, '.'), 1);
include($phpbb_root_path . 'common.' . $phpEx);
include($phpbb_root_path . 'includes/functions_display.' . $phpEx);

// Start session management
$user->session_begin();
$auth->acl($user->data);
$user->setup('viewforum');
Poi dipende dalle funzioni necessarie nella pagina, se devi postare ci vuole questo:

Codice: Seleziona tutto

define('IN_PHPBB', true);
$phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : './';
$phpEx = substr(strrchr(__FILE__, '.'), 1);
include($phpbb_root_path . 'common.' . $phpEx);
include($phpbb_root_path . 'includes/functions_posting.' . $phpEx);
include($phpbb_root_path . 'includes/functions_display.' . $phpEx);
include($phpbb_root_path . 'includes/message_parser.' . $phpEx);


// Start session management
$user->session_begin();
$auth->acl($user->data);

Re: Sistemare lettere accentate

Inviato: 11/10/2015, 10:53
da enzomaxxtro
ok grazie...almeno questo è sistemato....ancora non mi è chiaro come sistemare le accentate....con unna serie di echo ho visto che è proprio l'acquisizione del testo che non prende i caratteri accentati....
ho provato anche una semplice acquisizione con $_POST('Testo') ma mi da errore sulla funzione