Получение ’ вместо апострофа(') в PHP

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

Я собираюсь:

"It’s Getting the Best of Me"

Так должно быть:

"It’s Getting the Best of Me"

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


person Mint    schedule 18.02.2010    source источник
comment
Я иногда вижу это, когда люди обмениваются мгновенными сообщениями или посылают мне электронные письма с Mac. С нетерпением жду решения.   -  person Eric J.    schedule 18.02.2010
comment
Да, я тоже тестирую код на Mac, используя MAMP Pro.   -  person Mint    schedule 18.02.2010
comment
Если это произошло из таблицы MySQL, ни одно из приведенных здесь исправлений не подходит.   -  person Rick James    schedule 28.12.2017


Ответы (16)


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

person Matthew    schedule 18.02.2010
comment
Это работает, хотя я не могу понять, как заставить его работать на fopen - person Mint; 19.02.2010
comment
Как только вы получите содержимое нужного файла, передайте его в качестве первого параметра в mb_convert_encoding(). например, $text = fgets($fp); $html = mb_convert_encoding($text, "HTML-ENTITIES", "UTF-8"); - person Matthew; 19.02.2010
comment
домен больше недействителен. - person mtness; 05.06.2014
comment
Как насчет URL-адреса, где объект html не будет действительным URL-адресом для чего-то вроде RSS-канала. - person Titan; 22.04.2015
comment
@GreenGiant: мой ответ просто показывает вам, как конвертировать из одной кодировки в другую. URL-адреса (за исключением доменов) могут содержать символы Unicode; по крайней мере, современные браузеры умеют их отображать. например, это допустимый URL-адрес: en.wikipedia.org/wiki????. (Хотя SO ест косую черту после вики.) Таким образом, UTF-8 обычно является приемлемой кодировкой для URL-адресов. Но если вы хотите избежать этого, вы можете попробовать использовать «ASCII» для второго параметра. Однако он, очевидно, не будет поддерживать столько символов, поэтому вы можете получить '?' заполнители. - person Matthew; 23.04.2015

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

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

Обычно это помогает мне (очевидно, если содержимое UTF8).

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

person Ben    schedule 24.03.2010
comment
Это должен быть величайший пост! Я обновил свою кодировку до utf-8, и она мгновенно исправила все мои страницы, управляемые базой данных. Спасибо за это удивительно быстрое решение! - person Jamie; 03.04.2013
comment
Это следует принять как ответ, потому что это глобальное решение. - person Keith Petrillo; 24.10.2018

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

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, чтобы знать, как именно.

person cobbal    schedule 18.02.2010

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

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

$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');
person Tumharyyaaden    schedule 11.09.2013

Если вы здесь, потому что у вас возникли проблемы с нежелательными символами на вашем сайте 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', '');
    
person questCorp    schedule 21.06.2012

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

person pr1001    schedule 18.02.2010

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

mb_convert_encoding($text, "HTML-ENTITIES", "ISO-8859-1");
person anonymous coward    schedule 20.03.2014
comment
это решило мою проблему, так как один utf8_encode не работал. - person Roddy P. Carbonell; 20.03.2021

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

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

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

и вы закончили..

person Pranjal Deka    schedule 04.02.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;
?>
person ShapCyber    schedule 18.08.2016

Я посмотрел ссылку, и мне кажется, что это UTF-8. т. е. в Firefox, если вы выберете «Вид», «Кодировка символов», «UTF-8», он будет отображаться правильно.

Итак, вам просто нужно выяснить, как заставить ваш PHP-код обрабатывать это как UTF-8. Удачи!

person Chris Jester-Young    schedule 18.02.2010

попробуй это :

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

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

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

Если ни одно из вышеперечисленных решений не работает:

В моем случае я заметил, что одинарная кавычка была другим стилем одинарной кавычки. Вместо «у меня были данные». Заметили разницу в одинарной кавычке? Поэтому я просто написал str_replace, чтобы заменить его, и это решило проблему. Вероятно, не самое элегантное решение, но оно выполнило свою работу.

$string= str_replace("’","'",$string);
person crokadilekyle    schedule 29.01.2021
comment
Спасибо за то, что нацелились на самого распространенного из всех преступников, апострофа, лол. - person eliteproxy; 14.05.2021

использовать это

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

вместо этого

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

Вы должны проверить источник кодирования кодирования, а затем попытаться преобразовать его в правильный тип кодирования.

В моем случае я читаю CSV-файлы, а затем импортирую их в БД. Некоторые файлы отображаются хорошо, некоторые нет. Я проверяю кодировку и вижу, что файл с кодировкой 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);
}

После преобразования я помещаю содержимое в файл, затем обрабатываю импорт в БД, теперь оно хорошо отображается во внешнем интерфейсе.

person V.Tran    schedule 26.08.2019

Если ничего не работает, попробуйте mb_convert_encoding($elem-›textContent, 'UTF-8', 'utf8mb4');

person user14808817    schedule 11.12.2020
comment
Добро пожаловать в SO. Возможно, вы захотите дать некоторый контекст относительно того, почему они должны использовать это - person hurnhu; 11.12.2020