на вашем втором preg_replace, почему есть \
preg_replace('/x([a-fA-F0-9]{2})/', '&#$1;', $name);
хорошо, я думаю, здесь есть некоторая путаница. ваше регулярное выражение совпадает с чем-то вроде x66
и заменит это на '& # 66', что мне кажется кодировкой html entities
, но вы используете utf8_encode
, которая делает это (из руководства):
utf8_encode - Кодирует строку ISO-8859-1 в UTF-8
.
чтобы вещи никогда не конвертировались ... (или, если быть более точным, '& # 66' остались бы '& # 66', так как они являются одинаковыми символами в ISO-8859-1 и UTF-8)
также следует отметить в вашем первом фрагменте, который вы используете \xC6
, но preg_replace
никогда не поймает это, так как это уже закодированный символ. \x
означает, что следующее шестнадцатеричное число (0x00 ~ 0xFF) будет вставлено в строку как есть. не будет строки xC6
Так что я немного смущен тем, что ты действительно хочешь сделать. что такое preg_replace?
если вы хотите преобразовать сущности HTML в UTF-8, загляните в mb_convert_encoding
( manual ), если вы хотите сделать обратное, код в сущностях HTML из некоторых UTF-8 загляните в htmlentities
( руководство )
и если это не имеет ничего общего со всем этим, и вы хотите просто изменить кодировку, mb_convert_encoding
все еще там.