PHP HTML специальные символы кодируют не в сущности, а в десятичную - PullRequest
3 голосов
/ 15 марта 2012

У меня проблемы с поиском решения следующей проблемы:

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

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

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

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

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

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

Ответы [ 2 ]

2 голосов
/ 15 марта 2012

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

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 голосов
/ 05 декабря 2018

Следуя принятому примеру ответа и связанным комментариям о предупреждениях об устаревании флага «e», вот обновленная и многобайтовая совместимая функция для кодирования строки специальных символов в их HTML-сущности в десятичной записи:

function htmlnumericentities($string) {
    return mb_ereg_replace_callback('[^!-%\x27-;=?-~ ]', function($matches) {
        return '&#'.mb_ord($matches[0]).';';
    }, $string);
}

Конечно, вам понадобится строка MB.

Например, Dès 67,57 € будет преобразовано в D&#232;s 67,57&#160;&#8364;.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...