We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
表題の非UTF-8文字列は一例で、正確にはURLエンコードを解いた状態でUTF-8として解釈した場合に不正なバイト列となるURLを、カード取得のパラメータやチェックインのオカズリンクとして与えると500エラーが発生します。
入力例としては http://example.com/?q=%82%B5%82%B1%82%B5%82%B1 (URLエンコード部分は "しこしこ" のShift_JIS表現) のような文字列です。
http://example.com/?q=%82%B5%82%B1%82%B5%82%B1
原因は Formatter::normalizeUrl() 内の preg_replace() の呼び出しが、上記の条件を満たした場合にNULLを返すためです。後続の処理ではNULLを想定していないため、strict_typesの型チェックやDBの非NULL制約に引っかかって落ちます。 NULLが返ってくるのは正規表現にuフラグを設定しているため、UTF-8として妥当かのバリデーションが内部的に行われていることが理由です。preg_replace() はエラーが発生した場合、例外は出さずにNULLを返します。
Formatter::normalizeUrl()
preg_replace()
tissue/app/Utilities/Formatter.php
Lines 47 to 56 in 3114c7e
対応方法としては、そもそもuフラグを使う必要があるのかを検討したほうが良さそうです。不要な場合 str_replace() で単純な置換をすることもできます。 かなり小さいコードの文字なので、Shift_JISとかEUC-JPが入ってきても事故らず処理できるんじゃないかな。ISO-2022-JPは知らん。
str_replace()
The text was updated successfully, but these errors were encountered:
https://3v4l.org/W8R7R
Sorry, something went wrong.
No branches or pull requests
表題の非UTF-8文字列は一例で、正確にはURLエンコードを解いた状態でUTF-8として解釈した場合に不正なバイト列となるURLを、カード取得のパラメータやチェックインのオカズリンクとして与えると500エラーが発生します。
入力例としては
http://example.com/?q=%82%B5%82%B1%82%B5%82%B1
(URLエンコード部分は "しこしこ" のShift_JIS表現) のような文字列です。原因は
Formatter::normalizeUrl()
内のpreg_replace()
の呼び出しが、上記の条件を満たした場合にNULLを返すためです。後続の処理ではNULLを想定していないため、strict_typesの型チェックやDBの非NULL制約に引っかかって落ちます。NULLが返ってくるのは正規表現にuフラグを設定しているため、UTF-8として妥当かのバリデーションが内部的に行われていることが理由です。
preg_replace()
はエラーが発生した場合、例外は出さずにNULLを返します。tissue/app/Utilities/Formatter.php
Lines 47 to 56 in 3114c7e
対応方法としては、そもそもuフラグを使う必要があるのかを検討したほうが良さそうです。不要な場合
str_replace()
で単純な置換をすることもできます。かなり小さいコードの文字なので、Shift_JISとかEUC-JPが入ってきても事故らず処理できるんじゃないかな。ISO-2022-JPは知らん。
The text was updated successfully, but these errors were encountered: