Ответ 1
Попробуйте следующее:
$newtitle = html_entity_decode($newtitle, ENT_QUOTES, "UTF-8")
Если это не решение, просмотрите эту страницу http://us2.php.net/manual/en/function.html-entity-decode.php
это то, что я имею прямо сейчас
Рисуя RSS-канал в php, необработанный XML файл из rss-канала читает:
Paul’s Confidence
php, который у меня до сих пор есть.
$newtitle = $item->title;
$newtitle = utf8_decode($newtitle);
Вышеприведенные возвраты:
Paul?s Confidence
Если я удалю utf_decode, я получаю это
Paul’s Confidence
Когда я пытаюсь str_replace;
$newtitle = str_replace("”", "", $newtitle);
Он не работает, я получаю;
Paul’s Confidence
Любые мысли?
Попробуйте следующее:
$newtitle = html_entity_decode($newtitle, ENT_QUOTES, "UTF-8")
Если это не решение, просмотрите эту страницу http://us2.php.net/manual/en/function.html-entity-decode.php
Это моя функция, которая всегда работает независимо от кодировки:
function RemoveBS($Str) {
$StrArr = str_split($Str); $NewStr = '';
foreach ($StrArr as $Char) {
$CharNo = ord($Char);
if ($CharNo == 163) { $NewStr .= $Char; continue; } // keep £
if ($CharNo > 31 && $CharNo < 127) {
$NewStr .= $Char;
}
}
return $NewStr;
}
Как это работает:
echo RemoveBS('Hello õhowå åare youÆ?'); // Hello how are you?
Это приведет к удалению всех символов не-ascii/специальных символов из строки.
//Remove from a single line string
$output = "Likening ‘not-critical’ with";
$output = preg_replace('/[^(\x20-\x7F)]*/','', $output);
echo $output;
//Remove from a multi-line string
$output = "Likening ‘not-critical’ with \n Likening ‘not-critical’ with \r Likening ‘not-critical’ with. ' ! -.";
$output = preg_replace('/[^(\x20-\x7F)\x0A\x0D]*/','', $output);
echo $output;
Я решил проблему. Кажется, это короткое исправление, а не большая проблема, но он работает.
$newtitle = str_replace('’', "'", $newtitle);
Я также нашел этот полезный снипп, который может помочь другим с одинаковой проблемой;
<?
$find[] = '“'; // left side double smart quote
$find[] = 'â€'; // right side double smart quote
$find[] = '‘'; // left side single smart quote
$find[] = '’'; // right side single smart quote
$find[] = '…'; // elipsis
$find[] = 'â€"'; // em dash
$find[] = 'â€"'; // en dash
$replace[] = '"';
$replace[] = '"';
$replace[] = "'";
$replace[] = "'";
$replace[] = "...";
$replace[] = "-";
$replace[] = "-";
$text = str_replace($find, $replace, $text);
?>
Спасибо всем за ваше время и внимание.
Да, это не работает для меня. Каков обходной путь для этого? - vaichidrewar 12 марта в 22:29
Добавьте это в заголовок HTML (или измените, если он уже есть):
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
Это закодирует смешные символы, такие как "â € œ", в UTF-8, чтобы функция str_replace()
правильно интерпретировала их.
Или вы можете сделать это:
ini_set('default_charset', 'utf-8');
Является ли параметр кодировки символов для вашего сервера PHP чем-то иным, чем UTF-8? Если да, есть ли причина или может быть изменен на UTF-8? Хотя мы не храним данные в UTF-8 в нашей базе данных, я обнаружил, что установка символа веб-сервера, установленного в UTF-8, по-видимому, помогает решить проблемы с набором символов.
Мне было бы интересно услышать мнения других об этом... я настраиваю себя на проблемы, устанавливая веб-сервер в UTF-8, сохраняя данные в латинице1 в нашей базе данных mysql. Я знаю, что была причина, по которой я выбрал Latin1 для базы данных, но не могу вспомнить, что это было. Интересно, что наша текущая настройка, по-видимому, допускает ввод символов без UTF-8 и последующий рендеринг... кажется, что сохранение в Latin1 не предотвращает последующее декодирование и отображение всех символов UTF-8?
Используйте приведенный ниже код PHP для удаления
html_entity_decode(mb_convert_encoding(stripslashes($name), "HTML-ENTITIES", 'UTF-8'))
Читайте на http://us.php.net/manual/en/function.html-entity-decode.php
Это и символ html-код, поэтому вы можете легко декодировать его.
Это не работает Вы должны использовать $ arr1 = str_split ($ str) затем foreach и эхо ($ arr1 [$ к]) Это покажет вам, какие именно символы записываются в строку.
Супер простое решение состоит в том, чтобы символы были декодированы при загрузке страницы
Просто скопируйте/вставьте следующее в начале script
header('Content-Type: text/html; charset=UTF-8');
mb_internal_encoding('UTF-8');
mb_http_output('UTF-8');
mb_http_input('UTF-8');
mb_regex_encoding('UTF-8');
Ссылка: http://php.net/manual/en/function.mb-internal-encoding.phpкомментарий, оставленный webfav в web dot de
Please Try this.
$find[] = '/“/' //'“'; // left side double smart quote
$find[] = '/”/' //'â€'; // right side double smart quote
$find[] = '/‘/' //'‘'; // left side single smart quote
$find[] = '/’/' //'’'; // right side single smart quote
$find[] = '/ /' //'…'; // elipsis
$find[] = '/‖/' //'â€"'; // em dash
$find[] = '/–/' //'â€"'; // en dash
$replace[] = '“' // '"';
$replace[] = '”' // '"';
$replace[] = '‘' // "'";
$replace[] = '’' // "'";
$replace[] = '⋯' // "...";
$replace[] = '—' // "-";
$replace[] = '–' // "-";
$text = str_replace($find, $replace, $text);
Многие Странные Символы могут быть удалены путем применения mysqli_set_charset($con,"utf8");
ниже кода подключения mysql.
но при некоторых обстоятельствах удаления этого типа странный символ, такой как
нам нужно использовать: $title= ' Stefen Suraj'; $newtitle= preg_replace('/[^(\x20-\x7F)]*/','', $title); echo $newtitle;
$title= ' Stefen Suraj'; $newtitle= preg_replace('/[^(\x20-\x7F)]*/','', $title); echo $newtitle;
Выход будет: Stefen Suraj
Просто одно простое решение.
если ваша строка содержит эти странные символы
предположим, что $text
содержит некоторые из них, а затем просто как показано ниже:
$mytext=mb_convert_encoding($text, "HTML-ENTITIES", 'UTF-8')
и он будет работать.