Преобразование базы данных в UTF8 оставляет плохое кодирование гремлинов - PullRequest
1 голос
/ 12 марта 2020

Я только что изменил свою таблицу базы данных MySQL с utf8 на utf8mb4, чтобы моя CMS могла использовать emoji, et c. Я обнаружил, что некоторые из старого контента теперь показывают «гремлины», которые ранее отображались как правильный текст. Я думаю, что большинство из них имеют кодировку Windows -1252. Есть ли способ эффективно очистить их в MySQL? Я думал об этом в моем сценарии с регулярным выражением всякий раз, когда вывожу запись (см. Ниже для регулярного выражения о вещах, которые я нашел до сих пор), но кажется, что, возможно, я должен сделать это через базу данных раз и навсегда вместо этого?

#Fix ugly gremlins from bad encoding.
$hdata =~ s/’/'/sg;       # single quote
$hdata =~ s/“…/“/sg;    # left smart quote
$hdata =~ s/…/.../sg;     # elipsis
$hdata =~ s/–/--/sg;      # emdash
$hdata =~ s/“/“/sg;       # left smart quote
$hdata =~ s/â€/”/sg;        # right smart quote
$hdata =~ s/ –/”/sg;      # right smart quote
$hdata =~ s/Â//sg;          # Useless?

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

Вот пример процитированного текста с проблемными символами c (именно так он выглядит в самой базе данных MySQL - это не так. Разрушение, вызванное в течение Perl):

Картошка фри McDonald's, в течение приблизительно 4,5 с половиной минут, пока она абсолютно жгучая, является самой большой едой на Земле. Но их период полураспада поразительно быстр, и к тому времени, когда эти дети холодные, они на вкус как маленькие мучнистые сосульки. Проба, которую я взял, была теплой, а не обжигающей, поэтому их величие было поставлено под угрозу. Но я люблю тонкую картошку фри и, возможно, больше, я люблю память о картофеле фри Макдональда, который у меня был в прошлом.

Вот что делает мой шаблон, чтобы очистить его наверх:

Картофель фри Макдоналдса в течение приблизительно 4,5 с половиной минут, пока он абсолютно жгучий, является самой большой пищей на Земле. Но их период полураспада поразительно быстр, и к тому времени, когда эти дети холодные, они на вкус как маленькие мучнистые сосульки. Проба, которую я взял, была теплой, а не обжигающей, поэтому их величие было поставлено под угрозу. Но я люблю тонкую картошку фри и, возможно, больше, мне нравятся воспоминания о великой картошке Макдоналдса, которые у меня были в прошлом.

Опять же, мне не хватает других возможных проблемных c символов и Интересно, нужно ли его очищать на уровне базы данных, а не в Perl, когда он выводится.

...