нелатинские символы

ddurach

Новичок
нелатинские символы

IE перобразовывайт символ n и ~ сверху (есть такой в испанском языке) в &ntilde; Все хорошо до того момента пока надо отредактировать данное поле. При выводе в поле я использую htmlspecialchars, чтоб исключить проблемы с кавычками и знаками < и > , но данная функция преборазовывает значение поля в "Oma&ntilde;a" в Oma&amp;ntilde;a (это испанская фамииля...) Как быть?

Единственный метод, который пришел мне в голову - это делать обратное преобразование из &amp;ntilde; в &ntilde; после htmlspecialchars

Есть какое-то более цивилизованное решение?
 

ddurach

Новичок
в предыдущем сообщении символы неправильно отобразались... превоя строка должна была читаться как Oma&amp;ntilde;a a вторая - Oma&amp;amp;ntilde;a

Нашел такое рещение

PHP:
function fixhtml($str) {

$a = array(
    "Agrave", "agrave",
    "Aacute", "aacute",   
    "Acirc",  "acirc",    
    "Atilde", "atilde",   
    "Auml",   "auml",     
    "Aring",  "aring",    
    "AElig",  "aelig",    
    "Ccedil", "ccedil",   
    "Egrave", "egrave",   
    "Eacute", "eacute",   
    "Ecirc",  "ecirc",    
    "Euml",   "euml",     
    "Igrave", "igrave",   
    "Iacute", "iacute",   
    "Icirc",  "icirc",    
    "Iuml",   "iuml",     
    "ETH",    "eth",      
    "Ntilde", "ntilde",   
    "Ograve", "ograve",   
    "Oacute", "oacute",   
    "Ocirc",  "ocirc",    
    "Otilde", "otilde",   
    "Ouml",   "ouml",     
    "Oslash", "oslash",   
    "Ugrave", "ugrave",   
    "Uacute", "uacute",   
    "Ucirc",  "ucirc",   
    "Uuml",   "uuml",     
    "Yacute", "yacute",   
    "THORN",  "thorn");

	for ($i = 0; $i < count($a); $i++) {
		$from[] = "&amp;" . $a[$i];
		$to[]   = "&" . $a[$i];
	}

	return str_replace($from, $to, $str);

}
 

Tn

Guest
А мне кажется, что все у тебя просто:
- Эксплорер когда видит символ &ntilde; перед отсылкой формы преобразует его в &amp;ntilde;
- htmlspecialchars переводит символ & в спецсимвол &amp;amp; И в итоге ты получаешь &amp;amp;ntilde;

Поэтому после htmlspecialchars тебе их надо востановить, например так:
strtr($str, array('&amp;amp;' => '&'));
 

ddurach

Новичок
ну я этим и занимаюсь, только восстанавливать из надо не для всех случаев. я интересуюсь есть ли что-то другое?
 

Tn

Guest
strtr($str, array('&amp;amp;ntilde;' => '&amp;ntilde;'));

а можно свою my_htmlspecialchars() написать
 

fixxxer

К.О.
Партнер клуба
Может, проще хранить в базе не &amp;ntilde, а непосредственно сам символ "n~"? В используемой в Испании кодировке он наверняка присутствует:)
 

Tn

Guest
Я думаю, используя кодировку iso-8859-15 эксплорер не будет преобразовывать символ.
 

Semen

Семён
я работаю и живу в Португалии т.е. таже кодировка и в базе сохраняю ихнии специальные символы как есть и никаких проблем
 

ddurach

Новичок
Я еще проведу несколько тестов. Возможно это HTML редактор HTMLAREA (http://www.interactivetools.com) вытворяет такое... ИМХО у каждого из этих символов должен быть аналог в таблице с кодом 0..255
 

Rin

*
Хранить в БД нужно в испанской кодировке!
Мешанину делать нельзя!
При выводе испанского текста из БД в броузер нужно сделать следующее.
Если весь текст на испанском, выдать заголовок charset испанской кодировки (я не в курсе как она там правильно называется) и все.
Если тексты на разных языках, то придется специальные символы (с умляутами, тильдами, и т.д.) превратить в html-сущности. Для этого придется написать функцию-перекодировщик.

Еще можно посмотреть, как сделаны сайты в Испании.
 
Сверху