Newsgroup: it.comp.www.php
Titolo: utf8_decode -

Se io uso questo metodo:
$Testo = utf8_decode("Un giorno senza un sorriso è un giorno perso");
Mi da questo errore.
Notice: Uninitialized string offset: 44 in 
D:\job\htdocs\stelle\Variante_K.php on line 40
La ragione sta nella eccessiva quantità di caratteri, ma come posso 
ovviarvi?
Saluti
Leonardo
 
-- 
Non sono su facebook
Se anche tu vuoi cancellarti
http://www.giardiniblog.com/come-cancellarsi-da-facebook-eliminare-account/
 

 ovviarvi?
 
Non credo sia quello il problema...
 
Ciao!


Qualche idea su quale sia?



 
Io vedrei cosa c'è attorno alla riga 40: che io sappia utf8_decode non
ha (normalmente) questo tipo di problemi, per cui cercherei errori più
comuni lì intorno.
 
Ciao!


<?php
 
$Testo = utf8_decode("Un giorno senza un sorriso è un giorno perso");
for($i=0; $i<strlen($Testo); $i++)
{
echo $Testo[$i];
}
 
?>
 
lo strano è de se levo delle lettere o ne aggiungo funzioan bene.


La codifica dell'editor è UTF-8?

 eccessiva quantità di caratteri, ma come posso ovviarvi?
 
Semplice: non usare utf8_decode. :)
 
È una delle funzioni che andrebbero rimosse da PHP, e speravo lo facessero 
con la 7, ma troppa gente la usa senza sapere cosa fa e avrebbero rotto il 
70% di Internet.
 
utf8_decode cerca di trasformare un testo in utf8 in un testo in latin1. 
Naturalmente siccome latin1 supporta 255 caratteri e utf8 qualche milione, 
poi la gente si lamenta che ha i cubetti neri sul browser.
 
Il tuo testo è in utf8? Perché ti serve trasformarlo in latin1?
 
E in ogni caso, iconv è sempre meglio, almeno devi essere esplicito in 
quello che chiedi.
 
Bye.


In effetti non so bene come usarla.
Ho una stringa con dentro dei caratteri accentati e voglio vengano visti 
accentati.
Fra l'altro mi da dei problemi con gli apostrofi.
Mi consigli qualche link?


 Mi consigli qualche link?
 
Purtroppo in informatica non esiste "una stringa con caratteri accentati", 
ma solo "una stringa codificata con un certo charcode".
 
Devi scoprire come è codificata la tua stringa, poi scoprire come è 
codificato il tuo output, e infine, se necessario, convertire l'input 
nell'output.
 
Se la stringa è latin1 e l'output è utf8, puoi usare utf8_encode() (non 
decode) che è safe. Se non hai esattamente questa combinazione, usa iconv.
 
Bye.


ok, esiste un comando per scoprire come una stringa è codificata?
Saluti
Leonardo.


 ok, esiste un comando per scoprire come una stringa è codificata?
 
mb_detect_encoding(), ma è molto limitato.
 
Non c'è un modo sicuro per determinare l'encoding, visto che per lui sono 
solo valori a 8 bit, quindi numeri da 0 a 255, tutti validi.
 
Devi anche passargli tu una lista di encoding da controllare in ordine.
 
In generale più è lunga la stringa e più è esotico il charset e più facile 
è che individui il giusto encoding, sempre che tu glieli abbia passati 
nell'ordine giusto.
 
L'unico modo sicuro per saperlo è saperlo già, chiedendo a chi ha scritto 
quella stringa.
 
Bye.


OK
tanto per capire, mettiamo che io sto facendo un test in uno scritp PHP
Ho la variabile $Testo="questo è il test d'allora";
Contiene una e accentata ed un apostrofo, non c'è html ma solo lo script 
nella pagina PHP.
con il comando:
echo $Testo;
Com'è che faccio vedere a video la frase esattamente come la ho scritta 
Saluti
Leonardo


Com'è che faccio vedere a video la frase esattamente come la ho scritta 
 
Devi dire al browser remoto di usare lo stesso encoding che stai usando tu.
 
Per esempio, se la frase l'hai scritta con un editor Latin1, devi inviargli
qualcosa tipo
 
	Header("Content-Type:text/html;charset=ISO-8859-15");
 
mentre se è UTF-8,
 
	Header("Content-Type:text/html;charset=utf-8");
 
Per capire quale encoding tu stia usando, prova nelle opzioni dell'editor -
o altrimenti puoi andare a tentativi. Manda al browser prima utf-8, poi per
sicurezza win-1252, poi iso-8859-15, e vedi quale funziona.
 
Leonardo
 
-- 
 
Now suppose -just suppose- I could show you a way to
manufacture a wall that would do the same job... but
was only one inch thick.