mb_*code_numericentity Clarify the ValueError conditions - #4852
Conversation
|
Hi! I looked at the https://github.com/php/php-src/blob/master/ext/mbstring/tests/mb_encode_numericentity.phpt and all the convmap examples use exclusively integer values: No floats, numeric strings, booleans, or null values are tested as valid inputs. Also, the https://github.com/php/php-src/blob/master/ext/mbstring/tests/mb_encode_numericentity_errors.phpt shows the error message is: "must only be composed of values of type int" This suggests the current documentation ("list of integers") is correct. Could you share how you tested that floats/numeric strings are accepted? |
Check this out: I get that Anyway, in userland, passing values of other types into the parameter — contrary to the description — produces no warnings, no errors, no exceptions. That means the statement
does not match the actual function behavior |
Thanks for verifying this. |
Co-authored-by: Louis-Arnaud <la.catoire@gmail.com>
…_numericentity() (#3466) Translation of php/doc-en#4852 (commit 3505aae): the error is raised when map contains a value that is not an int, float, bool, null or numeric string, rather than when map is not a list of ints. EN-Revision updated.
* mb_strpos が返すのがバイト位置ではなく文字位置であることに追従 原文の php/doc-en@97f8edc (php/doc-en#5853) に追従する。 - 戻り値が、バイト位置ではなく 0 から数えた文字位置であることの明確化 - offset が文字単位であることの明記 - 文字オフセットとバイトオフセットが食い違う例の追加 - seealso への mb_strrpos と mb_stripos の追加 * mb_scrub の例を原文に追従 原文の php/doc-en@eb10503 (php/doc-en#5811) に追従する。 - bin2hex と var_dump でバイト列そのものを確認する例の追加 (端末やブラウザ、 フォントが独自の置換文字で表示するため、見た目だけでは判断できない) - 結果が mbstring.substitute_character に依存することを示す例 - 不正なバイト列を置き換えると u 修飾子つきの PCRE パターンがマッチするようになる例 - seealso の追加 * mb_decode_numericentity と mb_encode_numericentity の ValueError の条件とコード例に追従 原文の php/doc-en@3505aae (php/doc-en#4852) と php/doc-en@0bb8d1a (php/doc-en#4708) に追従する。 - ValueError がスローされる条件が「map が整数のリストでない場合」から 「map に int、float、bool、null、数値形式の文字列のいずれでもない値が 含まれている場合」に明確化されたこと - changelog 8.4.0 の条件が「map に暗黙のうちに int に変換できない値が 含まれている場合」に変わったこと - コード例の整形 (array( の記法、インデント、閉じ括弧の位置、末尾の ?>) * 不正なエンコーディングを渡した場合の説明を共有エンティティに追従 原文の php/doc-en@8465ca6 (php/doc-en#5418) に追従する。 - mb_strlen / mb_internal_encoding / mb_encoding_aliases の各ページが 独自に書いていた説明を、共有エンティティの参照に置き換え - mb_strlen に、不正なエンコーディングを渡すと PHP 8.0.0 以降は ValueError をスローすること (これより前は E_WARNING が発生し、 false を返していた) を追記 - ValueError のマークアップの誤りを classname から exceptionname に修正 * mb_http_input が ValueError をスローするようになったバージョンの誤りを原文に合わせて修正 原文の php/doc-en@2fab267 (php/doc-en#5252) に追従する。 - type が不正な場合に ValueError をスローするようになったのは 8.4.0 ではなく 8.0.0 であることの修正 * mb_encode_numericentity のコード例のコメントを翻訳 mb_decode_numericentity の同じコード例では訳されているコメントが、 mb_encode_numericentity では英語のまま残っていた。 あわせて、同じ内容のコメントが 2 ページで食い違わないよう、 mb_decode_numericentity 側の既訳も同一の文面に揃える。offsetN は 値に「追加」するのではなく加算するもので、そこも合わせて直す。
In the
mapparameter of themb_*code_numericentityfunctions, any scalar values are allowed, with the caveat that the string scalar must be a numeric string