Преобразование 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;
}