Получение вместо апострофа (') в PHP - PullRequest
51 голосов
/ 18 февраля 2010

Я пытался преобразовать текст в или из utf8, но это не помогло.

Я получаю:

"It’s Getting the Best of Me"

Должно быть:

"It’s Getting the Best of Me"

Я получаю эти данные от этого URL.

Ответы [ 13 ]

78 голосов
/ 18 февраля 2010

Для преобразования в 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 для получения дополнительных параметров кодирования.

26 голосов
/ 24 марта 2010

Убедитесь, что в заголовке html указан utf8

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

Это обычно помогает мне (очевидно, если контент - utf8).

Вам не нужно преобразовывать html-сущности, если вы указали тип содержимого.

12 голосов
/ 18 февраля 2010

Ваш контент в порядке; проблема с заголовками, которые отправляет сервер:

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 должен быть установлен в Content-type: text/plain; charset=utf-8, потому что эта страница не является HTML и использует кодировку utf-8. Chromium на Mac угадывает ISO-8859-1 и отображает символы, которые вы описываете.

Если вы не контролируете сайт, укажите кодировку UTF-8 для любой функции, которую вы используете для извлечения контента. Я не достаточно знаком с PHP, чтобы знать, как именно.

7 голосов
/ 11 сентября 2013

Я знаю, что на вопрос был дан ответ, но в моем случае настройка метатега не помогла, и выбранный ответ был недостаточно ясным, поэтому я хотел предоставить более простой ответ.

Для простоты сохраните строку в переменную и обработайте, как это

$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 - это массив со всеми значениями, в данном примере XML из фида с тегом «Заголовок», который может содержать специальные символы, такие как ‘ или ’.

$cleanedTitle = mb_convert_encoding($TVrage->title, "HTML-ENTITIES", 'UTF-8');
5 голосов
/ 21 июня 2012

Если вы здесь, потому что у вас проблемы с нежелательными персонажами на вашем сайте 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', '');
    
3 голосов
/ 18 февраля 2010

Звучит так, будто вы используете стандартные строковые функции для символов UTF8 (’), которых нет в ISO 8859-1 . Убедитесь, что вы используете Unicode-совместимые настройки и функции PHP. См. Также многобайтовые строковые функции.

2 голосов
/ 18 августа 2016

если все не работает, это может быть вашим лучшим решением.

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

== или ==

<?php
$content="It’s Getting the Best of Me";
$content = str_replace("’", "'", $content);
echo $content;
?>
1 голос
/ 26 апреля 2017

Для fopen и file_put_contents это будет работать:

str_replace("&rsquo;", "'", htmlspecialchars_decode(mb_convert_encoding($string_to_be_fixed, "HTML-ENTITIES", "UTF-8")));
1 голос
/ 04 февраля 2016

Просто попробуйте это

, если $text содержит странные символы, сделайте это:

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

и все готово ..

1 голос
/ 21 марта 2014

Мы добились успеха в другом направлении, используя это:

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