Как преобразовать UCS-2 в UTF-8 таким образом, с HTML, в PHP?

У меня есть HTML-форма, установленная в ISO-8859-1. Теперь я хочу преобразовать строку UCS-2 в строку UTF-8; этот вывод UTF-8 будет напечатан в <input type="text" name="out" />. И моя HTML-форма не должна изменять набор символов.

Я прочитал эти вопросы:

Я пытаюсь решить свою проблему с помощью этого кода:

<?php $str = $_POST['str']; ?>
<form method="post">
<input type="text" name="str" value="<?php echo $str; ?>" />
&nbsp;&nbsp;<input type="submit" />
</form>
<hr /><input type="text" name="out" value="<?php echo mb_convert_encoding($str, 'UCS-2', 'UTF-8'); ?>" />

Когда я ввожу слово в UCS-2, например: Việt Nam, возвращается: �V�i�&�#�7�8�7�9�;�t� �N�a�m. Почему?

Есть ли способ преобразовать UCS-2 в UTF-8 с помощью PHP; затем вывести в <input type="text" name="out" />?


person Community    schedule 30.07.2015    source источник
comment
1) Ваш вызов mb_convert_encoding преобразует из UTF-8 в UCS-2. Это не похоже на то, что вы хотите. 2) Мне неясно, почему вам нужно или вы ожидаете, что сможете передавать UTF-8 через ISO-8859-1, почему здесь необходим UCS-2 или как именно вы вводите UCS-2. Проясните пожалуйста многое.   -  person deceze♦    schedule 04.08.2015
comment
Как именно вы вводите слово в UCS-2?   -  person deceze♦    schedule 04.08.2015
comment
Значит, вы просто вводите текст в текстовое поле браузера? С чего вы взяли, что производит UCS-2?   -  person deceze♦    schedule 04.08.2015


Ответы (1)


UCS-2, кажется, не имеет абсолютно никакого отношения к вашей проблеме. Ни на одном этапе не задействована UCS-2.

Если у вас есть веб-сайт или форма, использующая кодировку ISO-8859-1 (или любое другое подмножество Unicode), и вы вводите символ, который не может быть закодирован в этой кодировке, браузер вместо этого будет кодировать символ как объект HTML и отправлять данные в кодировке ISO-8859-1, содержащие объекты HTML, на ваш сервер. Вы можете увидеть это в своем выводе, если немного прищуритесь: &#7879;.

Вы можете напрямую вывести эту сущность обратно в браузер, чтобы получить нужный символ. Если вы хотите преобразовать этот объект HTML в фактический символ, закодированный, скажем, в UTF-8, вам необходимо его HTML-декодировать:

echo html_entity_decode($str, ENT_COMPAT | ENT_HTML401, 'UTF-8');
person deceze♦    schedule 04.08.2015