Акценты автоматически заменяются цифрами после запроса POST

У меня проблема с POST-запросом, который Bitbucket отправляет на личную страницу всякий раз, когда делается фиксация: символы с акцентом заменяются цифрами.

Вот сообщение, которое я использую для коммита: Démo test éà

И вот что получает моя страница: Du00e9mo test u00e9u00e0

  • Я пытался использовать uft8_decode, utf8_encode, iconv (с UTF-8 и ISO-8859-1) и другие (на основе найденных сообщений)
  • Я сохранил свой скрипт в UTF-8
  • Я пытался использовать header('Content-Type: text/html; charset=UTF-8');

person Yoone    schedule 10.03.2013    source источник
comment
Вы пробовали кодировку URL?   -  person Maks3w    schedule 10.03.2013


Ответы (1)


Вот что произойдет, если вы удалите обратную косую черту \ из строки, закодированной JSON. Кодировка UTF правильная (è правильно 00e9).

Если вы используете stripslashes в своем коде, не делайте этого или используйте его (но в этом нет необходимости) с функцией сопоставления после json_decode.

Вот что сделал бы мошенник stripslashes:

<?php print json_decode(stripslashes(json_encode("Démo test éà"))) . "\n"; ?>

Du00e9mo test u00e9u00e0

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

<?php

$string = "Du00e9mo test u00e9u00e0";

$correct = preg_replace("/u([0-9a-f][0-9a-f][0-9a-f][0-9a-f])/", '\\u\\1', json_encode($string));

$string = json_decode($correct);

print "Output: $string\n";

?>

Output: Démo test éà
person LSerni    schedule 10.03.2013
comment
Большое спасибо, жаль, что я этого не заметил! Мне было интересно, почему в конце было n, а не \n... - person Yoone; 11.03.2013
comment
Хе. Как вы думаете, я догадался? Я тоже так делал :-) (и не один раз :-( ) - person LSerni; 11.03.2013
comment
Постараюсь запомнить в следующий раз :). Спасибо еще раз! - person Yoone; 11.03.2013