2010-02-18 13 views
43

Ho provato a convertire il testo in/da utf8, che non sembra essere di aiuto.Ottenere "invece di un apostrofo (') in PHP

Sto diventando:

"It’s Getting the Best of Me" 

dovrebbe essere:

"It’s Getting the Best of Me" 

sto ottenendo questi dati da this url.

+2

vedo questo a volte quando le persone IM o email me da un Mac. In attesa di vedere la soluzione. –

+0

Sì, sto testando il codice anche su un Mac, usando MAMP Pro. – Mint

+0

Se proviene da una tabella MySQL, nessuna delle correzioni fornite qui è appropriata. –

risposta

66

Per convertire in entità HTML:

<?php 
    echo mb_convert_encoding(
    file_get_contents('http://www.tvrage.com/quickinfo.php?show=Surviver&ep=20x02&exact=0'), 
    "HTML-ENTITIES", 
    "UTF-8" 
); 
?> 

Vedi documentazione per mb_convert_encoding per ulteriori opzioni di codifica.

+0

Funziona, anche se non riesco a capire come farlo funzionare su fopen – Mint

+5

Una volta ottenuto il contenuto del file che si desidera, quindi passarlo come primo parametro a 'mb_convert_encoding()'. ad es., $ text = fgets ($ fp); $ html = mb_convert_encoding ($ text, "HTML-ENTITIES", "UTF-8"); 'Il dominio – Matthew

+0

non è più valido. – mtness

1

Ho guardato il link, e sembra che UTF -8 per me. Ad esempio, in Firefox, se si seleziona Visualizza, Codifica caratteri, UTF-8, verrà visualizzato correttamente.

Quindi, è sufficiente capire come ottenere l'elaborazione del codice PHP come UTF-8. In bocca al lupo!

+0

Prova htmlspecialchars_decode –

+0

Nop, non è cambiato affatto. – Mint

3

Sembra che si stiano utilizzando funzioni di stringa standard su caratteri UTF8 (') che non esistono in ISO 8859-1. Verifica di utilizzare le impostazioni e le funzioni di PHP Unicode compatible. Vedi anche le funzioni di stringa multibyte.

12

Il contenuto è corretto; il problema è con le intestazioni server sta inviando:

Connection:Keep-Alive 
Content-Length:502 
Content-Type:text/html 
Date:Thu, 18 Feb 2010 20:45:32 GMT 
Keep-Alive:timeout=1, max=25 
Server:Apache/2.2.8 (Ubuntu) PHP/5.2.4-2ubuntu5.7 with Suhosin-Patch 
X-Powered-By:PHP/5.2.4-2ubuntu5.7 

Content-Type deve essere impostato su Content-type: text/plain; charset=utf-8, perché questa pagina non è HTML e utilizza la codifica UTF-8. Chromium su Mac indovina ISO-8859-1 e visualizza i caratteri che stai descrivendo.

Se non si ha il controllo del sito, specificare la codifica come UTF-8 per qualsiasi funzione utilizzata per recuperare il contenuto. Non conosco abbastanza bene PHP per sapere esattamente come.

21

Assicurarsi che l'intestazione HTML specifica utf8

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 

Che di solito fa il trucco per me (ovviamente se il contenuto è utf8).

Non è necessario convertire in entità html se si imposta il tipo di contenuto.

+0

Questo è il post più bello di sempre! Ho aggiornato il mio charset su utf-8 e ha risolto immediatamente tutte le mie pagine guidate dal database. Grazie per la correzione incredibilmente rapida! – jlg

5

Se siete qui perché stai riscontrando problemi con i caratteri spazzatura nel vostro sito WordPress, provate questo:

  1. Aprire wp-config.php

  2. come commento define('DB_CHARSET', 'utf8') e define('DB_COLLATE', '')

    /** MySQL hostname */ 
    define('DB_HOST', 'localhost'); 
    
    /** Database Charset to use in creating database tables. */ 
    //define('DB_CHARSET', 'utf8'); 
    
    /** The Database Collate type. Don't change this if in doubt. */ 
    //define('DB_COLLATE', ''); 
    
0

utilizzare questo

<meta http-equiv="Content-Type" content="text/html; charset=utf8_unicode_ci" /> 

invece di questo

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
5

So che la questione è stata risolta ma l'impostazione meta tag non ha aiutato nel mio caso e risposta selezionata non era abbastanza chiaro, così ho voluto fornire risposta più semplice.

Quindi, per farla semplice, stringa di negozio in una variabile e di processo che, come questo

$TVrageGiberish = "It’s Getting the Best of Me"; 

$notGiberish = mb_convert_encoding($TVrageGiberish, "HTML-ENTITIES", 'UTF-8'); 

echo $notGiberish; 

che dovrebbe restituire ciò che si voleva It’s Getting the Best of Me

Se state parsing qualcosa, è possibile eseguire la conversione, mentre l'assegnazione valori a una variabile come questa, dove $TVrage è una matrice con tutti i valori, in questo esempio XML da un feed con tag "Titolo" che può contenere caratteri speciali come ‘ o ’.

$cleanedTitle = mb_convert_encoding($TVrage->title, "HTML-ENTITIES", 'UTF-8'); 
1

provare questo:

html_entity_decode(mb_convert_encoding(stripslashes($text), "HTML-ENTITIES", 'UTF-8')) 
0

Abbiamo avuto successo andando nella direzione opposta utilizzando questo:

mb_convert_encoding($text, "HTML-ENTITIES", "ISO-8859-1"); 
-1

Basta provare questo

se $text contiene strani charaters fanno questo:

$mytext = mb_convert_encoding($text, "HTML-ENTITIES", 'UTF-8'); 

e si è fatto ..

1

se tutto sembra non funzionare, questa potrebbe essere la soluzione migliore.

<?php 
$content="It’s Getting the Best of Me"; 
$content = str_replace("’", "&#39;", $content); 
echo $content; 
?> 

== o ==

<?php 
$content="It’s Getting the Best of Me"; 
$content = str_replace("’", "'", $content); 
echo $content; 
?> 
1

Per fopen e file_put_contents, questo funzionerà:

str_replace("&rsquo;", "'", htmlspecialchars_decode(mb_convert_encoding($string_to_be_fixed, "HTML-ENTITIES", "UTF-8"))); 
Problemi correlati