2014-07-11 2 views
1

우리는 Cent OS에 설치된 Symfony & Doctrine으로 REST API를 작업 중입니다. 웹 사이트 (charset = UTF8)를 통해 REST API를 사용할 때 모든 것이 잘 동작합니다. (A, I, ...), 그들 중 일부는 다음과 같은 오류에 직면하고있다 Symfony/Doctrine : 유효하지 않은 바이트 시퀀스

그러나 외부 사용자가 API를 사용하고하려고 할 때 약간의 악센트 문자를 보내

[2014년 7월 11일 09 : 53 : 22] request.CRITICAL : 캐치되지 않은 PHP 예외 Doctrine \ DBAL \ DBALException : "INSERT INTO xyz.abc (id, creation_date, ip, type, message)를 실행하는 동안 예외가 발생했습니다. SQLSTATE [22021] : 레퍼토리에없는 문자 : 7 ERROR : 유효하지 않음 (오류가 발생했습니다.)? : params [19, null, "173.0.81.1", "VALID_TRANSACTION", "\ x74 \ x78 \ x6e \ x5f ..." "UTF8"인코딩 용 바이트 시퀀스 : 0xe1 0x6e 0x3b "

/var/www/xyz/symfony/vendor/doctrine/dbal/lib/Doctrine/DBAL/DBALException.php : 91, PDOException : SQLSTATE [22021] : 레퍼토리에없는 문자 : 7 ERROR : \ UTF8 \ 인코딩을위한 바이트 순서가 잘못되었습니다. 0xe1 0x6e 0x3b/var/www/xyz/symfony/vendor/doctrine/dbal/lib/교리/DBAL/Statement.php : 165) "}]

(psql를위한 -l)는 다음과 같이 구성된다

우리 PostgreSQL 데이터베이스 :

  • 명 : XYZ
  • 인코딩 : UTF8
  • 대조 : en_US.UTF-8
  • Char. 다음과 같이 입력하십시오. en_US.UTF-8

로그에 이러한 오류가 표시되지만 직접 재현 할 수는 없습니다. Content-Type API를 사용하려고합니다. application/json; charset = ...하지만 작동합니다.

나는 왜이 오류가 발생하는지 이해하지 못합니다. 또한 오류가있는 이유는 콘텐츠가 인코딩 된 이유입니다 (\ x74 \ x78 \ x6e \ x5f ...). pgsql에 연결하고 악센트 문자 (인코딩되지 않음)를 삽입하려고하면 ...

아무도이 문제를 해결하는 방법을 알고 있습니까?

감사합니다.

답변

1

아마도 대부분의 사용자가 비 utf8 유효 message으로 REST API를 호출하려고합니다.

Doctrine의 BDALExceptionjson_encode으로 바인딩 된 매개 변수를 인쇄하지만 실패하면 (utf-8이 아니기 때문에) print it hex이됩니다.

또한 PostgreSQL은 잘못된 utf8 문자 시퀀스가 ​​포함되어 있다고 불평합니다.

message starts withtxn_ (유효한 것으로 보이지만 나중에는 "\xe1\x6e\x3b"이 유효하지 않음). API를 부적절하게 사용할 수 있습니다.

+0

그건 내가 생각하기에 너무 재현 할 수 없네. 어떤 종류의 HTTP 헤더가이 인코딩 문제로 이어질 수 있습니까? 내가 이해할 수없는 또 다른 것은 Symfony가 json으로 원시 POST 컨텐츠를 파싱한다는 것입니다. 따라서 doctrine은 문자열을받습니다. php의 문자열 객체가 올바른 인코딩을 가지고 있지 않은지 어떻게 알 수 있습니까? –

+0

글쎄, 그 ip (귀하의 로그에) 현재 paypal에 속해 있습니다 : http://cqcounter.com/whois/ - 나는 두려워, 그들은 그들의 서비스에서 utf8을 전혀 사용하지 않습니다. – pozs

+0

@BenjaminLeclerc 아마 http://jlchereau.blogspot.hu/2006/10/paypal-ipn-with-utf8에 도움이 될 것입니다.htaccess Admin Home English Language Content – pozs

관련 문제