web-dev-qa-db-ja.com

PHPでアポストロフィ( ')の代わりに’を取得する

テキストをutf8に、またはutf8から変換しようとしましたが、役に立たなかったようです。

私は得ています:

"It’s Getting the Best of Me"

そのはず:

"It’s Getting the Best of Me"

this url。 からこのデータを取得しています

53
Mint

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

エンコードオプションの詳細については、 mb_convert_encoding のドキュメントを参照してください。

82
Matthew

Htmlヘッダーにutf8が指定されていることを確認してください

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

それは通常私のためにトリックを行います(明らかにコンテンツIS utf8)の場合)。

Content-typeを設定する場合、htmlエンティティに変換する必要はありません。

27
Ben

あなたのコンテンツは問題ありません。問題は、サーバーが送信しているヘッダーにあります。

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

このページはHTMLではなく、utf-8エンコードを使用するため、Content-TypeはContent-type: text/plain; charset=utf-8に設定する必要があります。 Mac上のChromiumはISO-8859-1を推測し、説明している文字を表示します。

サイトを管理していない場合は、コンテンツを取得するために使用する関数にUTF-8としてエンコードを指定します。私は、PHPについて正確に知るには十分ではありません。

12
cobbal

私は質問に答えましたが、私の場合、メタタグの設定は役に立たず、選択した答えが十分に明確ではなかったので、より簡単な答えを提供したかったのです。

シンプルにするために、文字列を変数に保存し、次のように処理します

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

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

echo $notGiberish;

あなたが望むものを返すはずですIt’s Getting the Best of Me

何かを解析している場合、このような変数に値を割り当てながら変換を実行できます。$TVrageはすべての値の配列です。この例では、特殊文字を含む可能性のあるタグ「Title」を持つフィードからのXML ‘’など。

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

WordPress=サイトでジャンク文字に関する問題が発生しているためにここにいる場合は、これを試してください:

  1. _wp-config.php_を開きます

  2. define('DB_CHARSET', 'utf8')および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

ISO 8859-1 に存在しないUTF8文字( ’)で標準の文字列関数を使用しているようです。 nicode互換 PHP設定と関数。 マルチバイト 文字列関数も参照してください。

3
pr1001

すべてがうまくいかないようであれば、これがあなたの最良の解決策かもしれません。

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

== or ==

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

これを使用して、他の方向に進むことに成功しました。

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

リンクを見てみると、UTF-8のように見えます。つまり、Firefoxでは、表示、文字エンコード、UTF-8を選択すると、正しく表示されます。

そのため、PHPコードを取得してUTF-8として処理する方法を理解する必要があります。幸運を祈ります!

1

これを試してみてください

$textに奇妙な文字が含まれている場合、次のようにします。

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

これで完了です。

1
Pranjal Deka

fopenおよびfile_put_contents、これは動作します:

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

これを試して :

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

エンコードエンコードをチェックして、Originを正しいエンコードタイプに変換してください。

私の場合、csvファイルを読み取ってdbにインポートします。一部のファイルは正常に表示され、一部は正常に表示されません。エンコーディングをチェックし、エンコーディングASCIIのファイルが正しく表示されること、UTF-8の他のファイルが壊れていることを確認します。したがって、エンコーディングを変換するには次のコードを使用します。

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);
}

変換後、コンテンツをファイルにプッシュし、DBへのインポートを処理し、フロントエンドでうまく表示されるようになりました

0
V.Tran

これを使って

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

これの代わりに

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