it-swarm.dev

Getting 'em vez de um apóstrofo (') em PHP

Eu tentei converter o texto para ou de utf8, o que não parece ajudar.

Estou entendendo:

"It’s Getting the Best of Me"

Deveria ser:

"It’s Getting the Best of Me"

Estou recebendo esses dados de this url.

48
Mint

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"
  );
?>

Consulte docs para mb_convert_encoding para mais opções de codificação.

76
Matthew

Certifique-se de que seu cabeçalho html especifique utf8

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

Isso geralmente faz o truque para mim (obviamente, se o conteúdo IS utf8).

Você não precisa converter para entidades html se você definir o tipo de conteúdo.

24
Ben

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

Content-Type 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 on Mac adivinha o ISO-8859-1 e exibe os caracteres que você está descrevendo.

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

12
cobbal

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

Então, para simplificar, armazene a string em uma variável e processe como esta

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

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

echo $notGiberish;

Qual deve retornar o que você queria It’s Getting the Best of Me

Se você estiver analisando algo, poderá realizar a conversão enquanto atribui valores a uma variável como essa, em que $TVrage é array com todos os valores, XML neste exemplo de um feed que possui a tag "Title", que pode conter caracteres especiais como ‘ ou ’

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

Se você está aqui porque está tendo problemas com caracteres indesejados em seu site WordPress, tente o seguinte:

  1. Abra wp-config.php

  2. Comenta 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', '');
    
5
questCorp

Parece que você está usando funções de string padrão em caracteres UTF8 (') que não existem em ISO 8859-1 . Verifique se você está usando as configurações/funções compatíveis com Unicode PHP. Veja também as funções multibyte string.

3
pr1001

Eu olhei para o link e parece UTF-8 para mim. Ou seja, no Firefox, se você selecionar Visualizar, Codificação de caracteres, UTF-8, ele aparecerá corretamente.

Então, você só precisa descobrir como obter seu código PHP para processá-lo como UTF-8. Boa sorte!

1
Chris Jester-Young

Apenas tente isso

se $text contiver caracteres estranhos, faça o seguinte:

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

e você está feito ..

1
Pranjal Deka

Para fopen e file_put_contents, isso funcionará:

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

tente isso: 

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

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;
?>
1
ShapCyber

Nós tivemos sucesso indo na outra direção usando isso:

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

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" />
0
karuppub