Преобразование PHP из utf8_general_ci в latin1_swedish_ci

Я получаю кучу данных с веб-сайта, и все эти значения String необходимо добавить в нашу базу данных.

При вставке в базу данных SQL иногда выдает следующую ошибку:

Warning:  PDOStatement::execute(): SQLSTATE[HY000]: General error: 1267 Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE)

Таблицы базы данных фактически настроены на использование Latin1.

После кодирования моих значений с помощью json_encode() я выяснил, что происходит с этой ошибкой. Последовательности UTF, представляющие некоторые специальные символьные символы, между строками должны быть преобразованы в их фактическое значение:

закодированная строка: индивидуальные обстоятельства кандидата

последовательность "u0080" представляет собой "в этом примере.

Независимо от того, что есть только несколько различных последовательностей, и я также знаю значения, которые я хочу / нужно заменить их, но я борюсь с преобразованием.

Я попробовал несколько подходов, но ни один из них не удался,

используя str_replace:

str_replace('\\u00e2\\u0080\\u0099', '\'', ($string));

Ничего не изменилось в строке

используя mb_functions:

$encodedStr = mb_convert_encoding($string, 'ASCII')

оставил меня с каким-то загадочным?? вместо последовательностей UTF, но это не выдает ошибку базы данных, но это все еще не то, что мне нужно.

используя preg_replace:

preg_replace('/\\u00e2\\u0080\\u0099/', '\'', $string)


выдал ошибку: PCRE не поддерживает \L, \l, \N{name}, \U или \u со смещением 1

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

1 ответ

Решение

Я наконец-то решил проблему. Просто если кто-то борется с той же проблемой. Решение, которое сработало для меня, было размещено в

У меня есть строка с "\u00a0", и мне нужно заменить ее на "" str_replace не удается

private function convert($string) {
    /* Strings to remove:    
     *      \u00a0 = 
     *      \u00e2\u0080\u0099 = '
     *      
     */
    $string = str_replace(chr(194).chr(160), '', $string);  //removes \u00a0
    $string = str_replace('â', '', $string);  //removes \u00e2
    $string = str_replace(chr(194).chr(128).chr(194).chr(153), '\'', $string);  //removes \u0080\u0099

    return $string;
    }
Другие вопросы по тегам