PHP: замена забавного персонажа на PHP - PullRequest
0 голосов
/ 15 октября 2010

Я пытаюсь заменить строку «Красный карлик (сериал 1988 года) - IMDb» на «Красный карлик (сериал 1988 года) - IMDb»

У меня есть таблица перевода этих смешныхсимволов в массиве. Я попытался заменить их, используя: str_replace, но это не сработало. Кто-нибудь может предложить решение этой проблемы? Это фрагмент кода:

function replaceFunnyChar( $input ){

$translation = array(
    '’' => "'",
    "â€\"" => '-',
    'é' => 'é',
    'è' => 'è',
    '“' => '"',
    'â€' => '"',
    '‘' => "'",
    'â' => 'ã',
    'Ã"' => 'ä',
    'â€"' => '–',
    'Ä«' => 'ī',
    '阴' => '阴',
    'é™°' => '陰',
    "阳" => "阳",
    "陽" => "陽",
    '´' => "'",
    'ü' => 'ü',
    "Ã,Ã'" => "'",
    '•' => '–'
);


foreach( $translation as $find => $replace ){
    $output = str_replace($find, $replace, $input );    
    //$output = preg_replace("/" . $find . "/", $replace, $input );
}
return $output;
}

Ответы [ 4 ]

2 голосов
/ 15 октября 2010

Лучше всего определить кодировку данных, которые у вас есть (если вы очищаете, то они находятся в заголовке HTTP и переопределяются метатегом в HTML), тогда вы можете использовать что-то вроде Iconv для преобразования это: http://php.net/manual/en/book.iconv.php

Если вы получаете данные в формате UTF-8, вам на самом деле не нужно их преобразовывать. Просто сохраните его и убедитесь, что ваша СУБД настроена на поддержку UTF-8. Затем при повторном отображении данных обязательно укажите UTF-8 на своей веб-странице.

Если вы используете командную строку Windows для отображения символов, это немного сложнее, поскольку командная строка Windows не использует UTF-8. Попробуйте Ubuntu или Mac OS X.

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

0 голосов
/ 13 февраля 2013

Убедись в этом ...

1: Table Collation type is UTF-8

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

если все еще не очень хорошо, попробуйте это, прежде чем добавлять данные в базу данных

mysql_set_charset('utf8');
0 голосов
/ 15 октября 2010

Я думаю, что ваша проблема - это ваш CHARSET, и решение состоит в том, чтобы сохранить документ как UTF-8 (без спецификации) в вашем текстовом редакторе. В противном случае вы можете добавить заголовок на свою страницу, и это можно сделать так:

HTML

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

PHP

header('Content-type: text/html; charset=utf-8');

Не забудьте установить верхний колонтитул вверху страницы! Если у вас все еще есть проблемы с charset , попробуйте изменить его с UTF-8 на ISO или что-то в этом роде.

0 голосов
/ 15 октября 2010

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

В любом случае, вы также можете просто сбросить каждый символ над ASCI 127:

function _dropAsciOver127($entity){
    if(($asciCode = ord($entity[0])) > 127){
        return '';
     }else{
        return $entity[0];
     }
 }

$weird = 'Red Dwarf (TV Series 1988â€") - IMDb';
$cool = preg_replace_callback('/[^\w\d ]/i','_dropAsciOver127', $weird);
print $cool; // prints Red Dwarf (TV Series 1988") - IMDb
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...