2012-03-15 4 views
2

У меня есть проблемы с поиском решения для следующей задачи:PHP HTML специальные символы кодирования не сущностей, но Decimal

У меня есть много специальных символов на веб-сайте, что когда я запускаю их через htmlentities();

вы получите все специальные символы преобразованы в HTML сущности:

£ => £ 
" => " 
 =>  
.... 

Но то, что я на самом деле нужно, это десятичное версия этой кодировки:

£ => £ 
" => " 
 of(Â) => À 
  =>   

Есть ли функция, которая уже существует, что решает эту проблему, не делая этого вручную с заменой?

+0

Мне любопытно, для какой проблемы это решение? Может быть, можно найти другое решение, чтобы вам это не нужно? – Nanne

+1

Я создаю XML-канал, и мне нужны действительные символы, поэтому он будет совместим с W3C, если используется десятичная кодировка, тогда я никогда не получаю никаких проблем, но если используется обычная кодировка htmlcharacter, то она не valdate – Alex

+0

Вы имеете в виду эту проблему? http://www.xml.com/pub/a/2003/01/02/xmlchar.html – Nanne

ответ

3

Что-то вроде следующего?

function htmlnumericentities($str){ 
    return preg_replace('/[^!-%\x27-;=?-~ ]/e', '"&#".ord("$0").chr(59)', $str); 
} 

function numericentitieshtml($str){ 
    return utf8_encode(preg_replace('/&#(\d+);/e', 'chr(str_replace(";","",str_replace("&#","","$0")))', $str)); 
} 

echo (htmlnumericentities ("Ceci est un test : & é $ à ç <")); 
echo ("<br/>\n"); 
echo (numericentitieshtml (htmlnumericentities ("Ceci est un test : & é $ à ç <"))); 
+0

Привет htmlnumericentities() идеально подходит для того, что мне нужно, но numericentitieshtml() имеет небольшую проблему, которую вы включили chr() в кавычки и '/ & # (\ d +);/e' regex выдает ошибку «Предупреждение: Неожиданный символ во вводе:« .... код регулярного выражения в строке 1 » – Alex

+0

Я тестировал на своем локальном компьютере, и он отлично работает: S , позвольте мне дважды проверить –

+0

Если у вас будет возможность взглянуть на функцию numericentitieshtml(), которая будет полезна для людей, которым потребуется ее использовать (мне на самом деле это не нужно, потому что я только работаю с выходом данные), но спасибо за это решение. – Alex