Obtendo â € ™ em vez de um apóstrofo (') no PHP
-
21-09-2019 - |
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.
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:
Abrir
wp-config.php
Comentar
define('DB_CHARSET', 'utf8')
edefine('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("’", "'", $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("’", "'", 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