Я пытался перевести несколько символов в ядро utf-8, чтобы сохранить их в моей базе данных.
PHP iconv не работает на многих символах, поэтому я был вынужден создать свое собственное «решение», которое на самом деле не является решением, если оно не работает, и почти полностью завершается с ошибкой в Windows, поэтому разработка с помощью iconv в основном бесплодны, так как я должен 'dev' на тестовом сервере. Кроме того, так как iconv пропускает кучу символов, это не очень полезно.
Вот что у меня есть, моя функция делает
function replace_accents($string) {
return str_replace( array('à','á','â','ã','ä', 'ç', 'è','é','ê','ë', 'ì','í','î','ï', 'ñ', 'ò','ó','ô','õ','ö', 'ù','ú','û','ü', 'ý','ÿ', 'À','Á','Â','Ã','Ä', 'Ç', 'È','É','Ê','Ë', 'Ì','Í','Î','Ï', 'Ñ', 'Ò','Ó','Ô','Õ','Ö', 'Ù','Ú','Û','Ü', 'Ý'), array('a','a','a','a','a', 'c', 'e','e','e','e', 'i','i','i','i', 'n', 'o','o','o','o','o', 'u','u','u','u', 'y','y', 'A','A','A','A','A', 'C', 'E','E','E','E', 'I','I','I','I', 'N', 'O','O','O','O','O', 'U','U','U','U', 'Y'), $string);
}
function replaceQuote($string){
$replaceQuote=array('‘', '’', '“', '”', ''','‚','„',''',"’");
return str_replace($replaceQuote,'\'', $string);
}
function replaceArray($string){
$replaceArray=array('—', '™','™','™','©', '®', '®','©',
'¡',
'¡',
'¢',
'¢',
'£',
'£',
'¤',
'¥',
'¥',
'¦',
'§',
'§',
'"',
'«',
'¬',
'¬',
'­',
'¯',
'¯',
'²',
'³',
'µ',
'µ',
'¶',
'¶',
'·',
'·',
'¸',
'¸',
'¹',
'º',
'º','"', '‹', '»','¼', '½','¾','♥', '☆', '☠', '░','▒','▓','█', '★',
'♪','♫','◄','▀','▄','►', '¤', '^', '☣', '…', '†', '‡', '.:','♣','Ξ','ξ','↠','⇒','→','↞','⇐','←',
'⇔','↔','™','♠','&loz','√','∩','&Cap','∴');
return str_replace($replaceArray, '', $string);
}
function special_replace($string){
$replace_from=array('ƒ', 'Œ','œ','•', '–', '—','˜','š','Š','Ÿ','ÿ','ε',
'€','α','Α','τ','Τ','θ','Θ');
$replace_to=array('ƒ', 'Œ','œ','•','-','-','~','š','Š','Ÿ','ÿ','ε','€','α','Α','τ','Τ','θ','Θ');
return str_replace($replace_from, $replace_to, $string);
}
function dbSlug($slugIt){
$slugIt=html_entity_decode($slugIt);
$slugIt=replaceArray($slugIt);
$slugIt=replaceQuote($slugIt);
$slugIt=special_replace($slugIt);
//$slugIt=iconv('ISO-8859-1', 'UTF-8//TRANSLIT//IGNORE', $slugIt);
$slugIt=replace_accents($slugIt);
$slugIt=trim($slugIt);
return $slugIt;
}
Может показаться неэффективным, поскольку у меня иногда один и тот же символ в нескольких функциях замены, но я использую функции в нескольких местах по-разному, поэтому у меня может быть один и тот же символ в более чем одной из моих функций замены.
Теперь проблема в том, что каждый раз, когда я иду и смотрю на данные, я нахожу ДРУГОЙ специальный символ, который не проходит через мой лабиринт поиска и замены / удаления символов.
В настоящее время оскорбительный персонаж - это то, что вы считаете довольно безобидным ».
Которые попадают в базу данных как «В». Не все пробелы имеют в виду, кажется, что это влияет только на некоторые пробелы (я еще не выяснил, почему).
Я занимаюсь этим уже больше недели, и каждый раз, когда я возвращаюсь и смотрю, я могу добавить еще кое-что к исправлению.
Я не спрашиваю, как удалить 'Â', я надеюсь получить решение о том, как сохранить целостность содержимого / данных, но не иметь специальных символов, которые иногда оказываются запутанными при перемещении данных и поддержание возможности поиска.
Я бы сделал
preg_replace("/[^a-zA-Z0-9,-\'-!&.etc]/", "", $data);
, но меня беспокоит, что я начну портить слова, где заменяются пропущенные специальные символы.
У меня уже был такой опыт, когда «Мехико» выходил «Мехико», так что это просто не работает.
Кодировка символов должна быть UTF-8, хотя я пытался изменить заголовок на ISO-8859-1 перед кодированием или не задавать какую-либо кодировку, и я всегда получаю один и тот же результат.
Я уверен, что то, что у меня есть, возможно, худший из возможных способов сделать это, но я не смог найти эффективного решения. Какие-либо предложения? Меня беспокоит то, что это почти никогда не кончается, и я всегда нахожу новых персонажей, которых не хватает в моем лабиринте перевода.