Как конвертировать 'u00e9' в символ utf8, в mysql или php?
Я делаю некоторую очистку данных на некоторых грязных данных, которые импортируются в mysql.
Данные содержат "псевдо" символы юникода, которые фактически встроены в строки как "u00e9" и т. д.
Таким образом, одно поле может быть.. 'Jalostotitlu00e1n'
Мне нужно вырвать эту неуклюжую 'u00e1n' и заменить ее соответствующим символом utf
Я могу сделать это в любом mysql, используя substring и CHR, возможно, но я предварительно обрабатываю данные через PHP, поэтому я мог бы сделать это там тоже.
Я уже знаю все о том, как настроить mysql и php для работы с данными utf. Проблема на самом деле заключается только в импорте исходных данных Im.
Спасибо
3 ответов:
Есть способ. Замените все
uXXXXих HTML-представлением и сделайтеhtml_entity_decode()То есть
echo html_entity_decode("Jalostotitlán");Каждый символ UTF в виде
u1234может быть напечатан в HTML какሴ. Но сделать замену довольно сложно, потому что может быть много ложных срабатываний, если нет другого символа, который идентифицирует начало последовательности UTF. Простое регулярное выражение может быть
preg_replace('/u([\da-fA-F]{4})/', '&#x\1;', $str)
/* Функции PHP для преобразования в HTML кодировке utf8 в ANSI * /
public static function Utf8_ansi($valor='') { $utf8_ansi2 = array( "\u00c0" =>"À", "\u00c1" =>"Á", "\u00c2" =>"Â", "\u00c3" =>"Ã", "\u00c4" =>"Ä", "\u00c5" =>"Å", "\u00c6" =>"Æ", "\u00c7" =>"Ç", "\u00c8" =>"È", "\u00c9" =>"É", "\u00ca" =>"Ê", "\u00cb" =>"Ë", "\u00cc" =>"Ì", "\u00cd" =>"Í", "\u00ce" =>"Î", "\u00cf" =>"Ï", "\u00d1" =>"Ñ", "\u00d2" =>"Ò", "\u00d3" =>"Ó", "\u00d4" =>"Ô", "\u00d5" =>"Õ", "\u00d6" =>"Ö", "\u00d8" =>"Ø", "\u00d9" =>"Ù", "\u00da" =>"Ú", "\u00db" =>"Û", "\u00dc" =>"Ü", "\u00dd" =>"Ý", "\u00df" =>"ß", "\u00e0" =>"à", "\u00e1" =>"á", "\u00e2" =>"â", "\u00e3" =>"ã", "\u00e4" =>"ä", "\u00e5" =>"å", "\u00e6" =>"æ", "\u00e7" =>"ç", "\u00e8" =>"è", "\u00e9" =>"é", "\u00ea" =>"ê", "\u00eb" =>"ë", "\u00ec" =>"ì", "\u00ed" =>"í", "\u00ee" =>"î", "\u00ef" =>"ï", "\u00f0" =>"ð", "\u00f1" =>"ñ", "\u00f2" =>"ò", "\u00f3" =>"ó", "\u00f4" =>"ô", "\u00f5" =>"õ", "\u00f6" =>"ö", "\u00f8" =>"ø", "\u00f9" =>"ù", "\u00fa" =>"ú", "\u00fb" =>"û", "\u00fc" =>"ü", "\u00fd" =>"ý", "\u00ff" =>"ÿ"); return strtr($valor, $utf8_ansi2); }
Мой сценарий временной шкалы twitter возвращает специальные символы, такие как é в \u00e9, поэтому я убрал обратную косую черту и использовал @rubbude его preg_replace.
// Fix uxxxx charcoding to html $text = "De #Haarstichting is h\u00e9t medium voor alles Into: De #Haarstichting is hét medium voor alles"; $str = str_replace('\u','u',$text); $str_replaced = preg_replace('/u([\da-fA-F]{4})/', '&#x\1;', $str); echo $str_replaced;Это работает на меня и получается:
De #Haarstichting is h\u00e9t medium voor allesВ:De #Haarstichting is hét medium voor alles
Comments