Получаване на ’ вместо апостроф(') в 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 изяжда наклонената черта след wiki.) Така че 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 знаци ('), които не съществуват в ISO 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, ако изберете View, Character Encoding, 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 файлове, след което импортирам в 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, ​​сега се показва добре в предния край

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