Pergunta

Tentei converter o texto de ou para o UTF8, o que não parecia ajudar.

Estou entendendo:

"It’s Getting the Best of Me"

Deveria ser:

"It’s Getting the Best of Me"

Estou recebendo esses dados de este URL.

Foi útil?

Solução

Para converter em entidades 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"
  );
?>

Veja documentos para mb_convert_encoding Para mais opções de codificação.

Outras dicas

Verifique se o seu cabeçalho HTML especifica UTF8

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

Isso geralmente faz o truque para mim (obviamente se o conteúdo for UTF8).

Você não precisa converter em entidades HTML se definir o tipo de conteúdo.

Seu conteúdo está bem; O problema é com os cabeçalhos que o servidor está enviando:

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

O tipo de conteúdo deve ser definido como Content-type: text/plain; charset=utf-8, porque esta página não é HTML e usa a codificação UTF-8. O Chromium no Mac suporta o ISO-8859-1 e exibe os personagens que você está descrevendo.

Se você não estiver no controle do site, especifique a codificação como UTF-8 para qualquer função que você usar para recuperar o conteúdo. Não estou familiarizado o suficiente com o PHP para saber exatamente como.

Eu sei que a pergunta foi respondida, mas definir a meta tag não ajudou no meu caso e a resposta selecionada não era clara o suficiente, então eu queria fornecer uma resposta mais simples.

Então, para simplificar, armazene a string em uma variável e processo que assim

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

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

echo $notGiberish;

Que devem devolver o que você queria It’s Getting the Best of Me

Se você está analisando algo, pode executar a conversão ao atribuir valores a uma variável como essa, onde $TVrage é matriz com todos os valores, xml neste exemplo de um feed que tem tag "title" que pode conter caracteres especiais como ‘ ou ’.

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

Se você está aqui porque está enfrentando problemas com personagens de lixo no seu site WordPress, tente o seguinte:

  1. Abrir wp-config.php

  2. Comentar 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', '');
    

Parece que você está usando funções de string padrão em um UTF8 caracteres (') que não existe em ISO 8859-1. Verifique se você está usando Unicode Compatível Configurações e funções do PHP. Veja também o Multibyte funções de string.

Se tudo parece não funcionar, essa pode ser sua melhor solução.

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

== ou ==

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

Eu olhei para o link e parece UTF-8 para mim. ou seja, no Firefox, se você escolher a visualização, a codificação de caracteres, UTF-8, ele aparecerá corretamente.

Portanto, você só precisa descobrir como obter seu código PHP para processar isso como UTF-8. Boa sorte!

Experimente isso:

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

Tivemos sucesso indo para a outra direção usando isso:

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

Apenas tente isso

E se $text Contém Charaters Strange Faça isso:

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

e você terminou ..

Por fopen e file_put_contents, isso vai funcionar:

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

usa isto

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

em vez disso

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

Você deve verificar a origem da codificação da codificação e tente converter para corrigir o tipo de codificação.

No meu caso, li arquivos CSV e importo para o banco de dados. Alguns arquivos exibem bem alguns não. Verifico a codificação e vejo esse arquivo com a codificação do ASCII exibe bem, outro arquivo com UTF-8 está quebrado. Então, eu uso o seguinte código para converter a codificação:

if(mb_detect_encoding($content) == 'UTF-8') {
    $content = iconv("UTF-8", "ASCII//TRANSLIT", $content);
    file_put_contents($file_path, $content);
} else {
    $content = mb_convert_encoding($content, 'UTF-8', 'UTF-8');
    file_put_contents($file_path, $content);
}

Depois de converter, pressiono o conteúdo para o arquivo e processar a importação para o banco de dados, agora ele exibe bem no front-end

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top