Что это за символ (Â) и как его удалить с помощью PHP?

Это капитал A с a ^ сверху: Â

Он появляется в строках, вытаскиваемых из веб-страниц. Он отображается там, где ранее было пустое место в исходной строке исходного сайта. Это фактический символ, который хранится в моей базе данных. Это также то, что отображается на моем веб-сайте, когда я повторяю строку, содержащую его.

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

Я пробовал str_replace() и html_entity_decode() и ничего не делал.

Что еще я должен попробовать?

Ответ 1

"Латинская 1" - ваша проблема здесь. На веб-странице доступно около 65256 символов UTF-8, которые нельзя сохранить на кодовой странице Latin-1.

Для вашей непосредственной проблемы вы должны иметь возможность

$clean = str_replace(chr(194)," ",$dirty)

Однако я бы переключил вашу базу данных на использование utf-8 ASAP, так как проблема почти наверняка повторится.

Ответ 2

На самом деле это не один символ и, скорее всего, вызван несогласованностью между кодировкой содержимого и кодировкой браузера. Попробуйте установить кодировку вашей выводимой страницы на то, что вы используете.

например. В разделе вывод:

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

(Отрегулируйте UTF-8 тем, что вы используете)

Ответ 3

Это работает для меня:

$string = "Sentence ‘not-critical’ and \n sorting ‘not-critical’ or this \r and some ‘not-critical’ more. ' ! -.";
$output = preg_replace('/[^(\x20-\x7F)\x0A\x0D]*/','', $string);

Ответ 4

Я использую это много

function cleanStr($value){
    $value = str_replace('Â', '', $value);
    $value = iconv('UTF-8', 'ASCII//TRANSLIT//IGNORE', $value);
    return $value;
}

Ответ 5

Использовать коды Bellow

echo "<META http-equiv='Content-Type' content='text/html; charset=UTF-8'>";
echo htmlspecialchars_decode($your_string, ENT_QUOTES);

Ответ 6

Эта проблема возникает при использовании другой кодировки в вашей сети.

Чтобы решить эту проблему (используя utf-8 в примерах):

в <HEAD> вашей страницы добавить charset:

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

В любой форме, которую вы отправляете, добавьте accept-charset:

<form name="..." method=".." id=".."  accept-charset="utf-8">

Если вы используете php + MySQLi для обработки вашей формы, вы должны убедиться, что соединение с базой данных также поддерживает вашу кодировку. Процедурный стиль:

mysqli_set_charset($link, "utf8");

и объектно-ориентированный стиль:

$mysqli->set_charset("utf8")

Ответ 7

На самом деле я должен был иметь все это:

    <--!DOCTYPE html--> 
    <--html lang="en-US"-->
    <--head-->
    <--meta charset="utf-8"-->   
    <--meta http-equiv="X-UA-Compatible" content="IE=edge"--> 
    <--meta name="viewport" content="width=device-width, initial-scale=1"--> 
    <--meta http-equiv="Content-Type" content="text/html; charset=utf-8/" /--> 

Ответ 8

Чтобы удалить символ из строки

mysqli_set_charset ($ жулик, "utf8");

$ price = "250,00";

$ price2 = preg_replace ('/[^ (\ x20-\x7F)] */', '', $ price);

Результат: 250.00

Ответ 9

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

Помимо этого, если вы обнаружите, что этот "½" в строке является двойным ошибочным символом, он был отображен браузером как несовместимый символ "this", после чего он снова был сохранен. Поэтому "�" не может быть прослежено до его первоначального характера. Но все же полезно знать и находить, где эти персонажи были навсегда потеряны.

array(
        'ü'=>'ü',
        'ä'=>'ä',
        'ö'=>'ö',
        'Ö'=>'Ö',
        'ß'=>'ß',
        'Ã '=>'à',
        'á'=>'á',
        'â'=>'â',
        'ã'=>'ã',
        'ù'=>'ù',
        'ú'=>'ú',
        'û'=>'û',
        'Ù'=>'Ù',
        'Ú'=>'Ú',
        'Û'=>'Û',
        'Ãœ'=>'Ü',
        'ò'=>'ò',
        'ó'=>'ó',
        'ô'=>'ô',
        'è'=>'è',
        'é'=>'é',
        'ê'=>'ê',
        'ë'=>'ë',
        'À'=>'À',
        'Ã'=>'Á',
        'Â'=>'Â',
        'Ã'=>'Ã',
        'Ä'=>'Ä',
        'Ã…'=>'Å',
        'Ç'=>'Ç',
        'È'=>'È',
        'É'=>'É',
        'Ê'=>'Ê',
        'Ë'=>'Ë',
        'ÃŒ'=>'Ì',
        'Ã'=>'Í',
        'ÃŽ'=>'Î',
        'Ã'=>'Ï',
        'Ñ'=>'Ñ',
        'Ã'=>'Ò',
        'Ã"'=>'Ó',
        'Ã"'=>'Ô',
        'Õ'=>'Õ',
        'Ø'=>'Ø',
        'Ã¥'=>'å',
        'æ'=>'æ',
        'ç'=>'ç',
        'ì'=>'ì',
        'í'=>'í',
        'î'=>'î',
        'ï'=>'ï',
        'ð'=>'ð',
        'ñ'=>'ñ',
        'õ'=>'õ',
        'ø'=>'ø',
        'ý'=>'ý',
        'ÿ'=>'ÿ',
        '°'=>'°',
        '€'=>'€',
        'â€"'=>'–',
        ' '=>' ',
        '‘'=>'‘',
        '’'=>'',
        '“'=>'"',
        '†'=>'"'
    );

с благодарностью Себастьяну Вьереку за предоставление первого набора потерянных персонажей.