Я делаю форму с текстом ввода.Преобразование строки Юникода в строку PHP utf8
<input type="text" id="input" value=""/>
я получил UTF-8 строку из Интернета, как это (с JavaScript, JQuery)
var str = '\u306e\u7c21\u5358\u306a\u8aac\u660e';
ул является "の 簡 単 な 説明.
набор входного значения поля к «ул»
$('#input').val(str);
этот входной заменить все убегания строки «\» и заданной строки, как это.
<input type"text" id="input" value="u306eu7c21u5358u306au8aacu660e"/>
проблем нет в этом пункте. дисплей знак тоже хорошо.
Но.
Когда я сохранить эту строку в моей базе данных с PHP
PHP поместить это значение не маскирование utf8 строка «u306eu7c21u5358u306au8aacu660e» в базе данных
и в следующий раз я называю
<input type="text" id="input" value="<?=$str?>">
и браузер отображает необработанное значение
только 'u306eu7c21u5358u306au8aacu660e'
не 'の 簡 単 な 説明'
Я не знаю, что это неправильно.
Я попытался
$str = json_decode("\"".$str."\"");
html_entity_decode(...);
mb_convert_encoding(...);
, но не работает правильно ...
Как я могу тайный эту неоднозначность маскирования UTF-8 строку в общую UTF-8 строку?
'u306eu7c21' *** не ***« UTF-8 ». Это строка с символами «u306eu7c21». '\ u ....' - это escape-последовательность в строковых литералах Javascript/JSON, но «u306eu7c21» ничего не значит в любом контексте.Текст «の 簡 単 な 説明», закодированный в UTF-8 (и правильно интерпретированный), выглядит как «の 簡 単 な 説明», ничего больше. Не должно быть никаких расшифровки, кодирования, снятия или преобразования в любой момент. Что делать, если вы делаете все эти шаги обработки строк и просто отправляете значение как есть? – deceze
@deceze Основная проблема: $ ('# input'). Val ("utf-8 encoded string") метод принудительно меняет '\ u' на 'u', а php принимает строку 'uxxxxuxxxx ....'. ответ сервера правильный. utf-8 закодированные строковые ответы типа '\ uxxxx \ uxxxx' – LaLaAsDev
Я не знаю, это кажется странным. Можете ли вы опубликовать наименьший возможный пример, который воспроизводит эту проблему? Я предполагаю, что у вас буквально нет 'var str = '\ u306e ...'', вы получаете '\ u306e ...' с сервера где-нибудь (AJAX JSON?) И уже не можете его декодировать правильно или что-то. – deceze