2010-11-08 2 views
3

Эй, это мой первый пост в stackoverflow.Замените é на e в PHP

Я пытаюсь заменить é на e и другие подобные специальные символы. Я попытался str_replace() и преобразовал его из UTF-8 в ASCII, но ничего не работает. Когда я конвертирую его из UTF-8 во что угодно, он просто отбрасывает. Когда я использую str_replace(), он никогда не ловит его, и é все еще там.

У меня на внутреннем сервере что-то не так, потому что мой друг попробовал str_replace() на своем сервере, и он работал нормально.

Спасибо,

Джейсон Tolhurst

+0

Возможный дубликат [Необходимость преобразования é в e в PHP] (http://stackoverflow.com/questions/4125658/need-to-convert-e-to-e-in-php) –

ответ

7
$string = iconv('utf-8','ASCII//IGNORE//TRANSLIT',$string); 
+0

Да, с конца. –

+0

Это не здесь ..... Можете ли вы добраться до командной строки и посмотреть, поддерживаются ли обе кодировки с помощью 'iconv -l'? И что означает 'mb_detect_encoding ($ string);' say о вероятном наборе символов строки (это может быть не utf-8)? – Wrikken

+0

Я могу получить там, как это проверить? –

4

Вы можете использовать htmlentities() конвертировать é в é, а затем использовать регулярные выражения, чтобы вытащить первый символ после амперсанда.

function RemoveAccents($string) { 
    // From http://theserverpages.com/php/manual/en/function.str-replace.php 
    $string = htmlentities($string); 
    return preg_replace("/&([a-z])[a-z]+;/i", "$1", $string); 
} 
+1

Yay for '€', '& plusmn;', '& frac14;', '&' и [загрузить другие] (http://www.w3.org/TR/WD-html40-970708/sgml/entities.html), ИМХО, вы вводите новые проблемы, хотя исходная проблема действительно решена. – Wrikken

+0

Вы совершенно правы, хотя это может быть или не быть проблемой, в зависимости от случая использования. – TRiG

+0

'$ string = preg_replace (array ('/ ß /', '/&(..)lig;/', '/ & ([aeioucyAEIOUCY]) (uml | sharp | ring | cedil | circ | tilde | grave | slash);/','/&(.)[^;] *;/'), array (' ss ',' $ 1 "," $ 1 "," "), $ string);' – Aistina

Смежные вопросы