Подтвердить что ты не робот

Удаление странных символов из строки 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

Любые мысли?

4b9b3361

Ответ 2

Это моя функция, которая всегда работает независимо от кодировки:

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?

Ответ 3

Это приведет к удалению всех символов не-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;

Ответ 4

Я решил проблему. Кажется, это короткое исправление, а не большая проблема, но он работает.

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

Спасибо всем за ваше время и внимание.

Ответ 5

Да, это не работает для меня. Каков обходной путь для этого? - 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');

Ответ 6

Является ли параметр кодировки символов для вашего сервера PHP чем-то иным, чем UTF-8? Если да, есть ли причина или может быть изменен на UTF-8? Хотя мы не храним данные в UTF-8 в нашей базе данных, я обнаружил, что установка символа веб-сервера, установленного в UTF-8, по-видимому, помогает решить проблемы с набором символов.

Мне было бы интересно услышать мнения других об этом... я настраиваю себя на проблемы, устанавливая веб-сервер в UTF-8, сохраняя данные в латинице1 в нашей базе данных mysql. Я знаю, что была причина, по которой я выбрал Latin1 для базы данных, но не могу вспомнить, что это было. Интересно, что наша текущая настройка, по-видимому, допускает ввод символов без UTF-8 и последующий рендеринг... кажется, что сохранение в Latin1 не предотвращает последующее декодирование и отображение всех символов UTF-8?

Ответ 7

Используйте приведенный ниже код PHP для удаления

html_entity_decode(mb_convert_encoding(stripslashes($name), "HTML-ENTITIES", 'UTF-8'))

Ответ 9

Это не работает Вы должны использовать $ arr1 = str_split ($ str) затем foreach и эхо ($ arr1 [$ к]) Это покажет вам, какие именно символы записываются в строку.

Ответ 10

Супер простое решение состоит в том, чтобы символы были декодированы при загрузке страницы

Просто скопируйте/вставьте следующее в начале 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

Ответ 11

Please Try this. 


$find[] = '/&acirc;&#128;&#156;/' //'“'; // left side double smart quote
$find[] = '/&acirc;&#128;&#157;/' //'â€'; // right side double smart quote
$find[] = '/&acirc;&#128;&#152;/' //'‘'; // left side single smart quote
$find[] = '/&acirc;&#128;&#153;/' //'’'; // right side single smart quote
$find[] = '/&acirc;&#128;&#133/'  //'…'; // elipsis
$find[] = '/&acirc;&#128;&#150;/' //'â€"'; // em dash
$find[] = '/&acirc;&#128;&#147;/' //'â€"'; // en dash

$replace[] = '&ldquo;' // '"';
$replace[] = '&rdquo;' // '"';
$replace[] = '&lsquo;' // "'";
$replace[] = '&rsquo;' // "'";
$replace[] = '&#8943;' // "...";
$replace[] = '&mdash;' // "-";
$replace[] = '&ndash;' // "-";

$text = str_replace($find, $replace, $text);

Ответ 12

Многие Странные Символы могут быть удалены путем применения 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

Ответ 13

Просто одно простое решение.

если ваша строка содержит эти странные символы предположим, что $text содержит некоторые из них, а затем просто как показано ниже:

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

и он будет работать.