[DOC-CVS] [doc-en] master: Add examples for mb_scrub() (#5811)

[email protected] (Louis-Arnaud via GitHub)
Newsgroups php.doc.cvs
Message-ID <[email protected]>
Author: Louis-Arnaud (lacatoire)
Committer: GitHub (web-flow)
Pusher: lacatoire
Date: 2026-08-27T21:25:06+02:00

Commit: https://github.com/php/doc-en/commit/eb10503592351cf78c25be21c60a9049784d57bb
Raw diff: https://github.com/php/doc-en/commit/eb10503592351cf78c25be21c60a9049784d57bb.diff

Add examples for mb_scrub() (#5811)

* Add examples for mb_scrub()

The page had no example, which made it hard to see that the replacement
happens in the string itself: terminals, browsers and fonts render an
ill-formed byte sequence with a replacement character of their own, so
visual output alone is misleading. Both examples use bin2hex() or
var_dump() so the reader sees the bytes rather than the rendering.

The first example also shows that the result depends on the substitute
character: mbstring.substitute_character defaults to "?" (0x3F), so the
scrubbed string is 41 3f 42, and 41 ef bf bd 42 only after calling
mb_substitute_character(0xFFFD).

The second example shows the practical use: a PCRE pattern with the u
modifier fails on the raw input and succeeds once it has been scrubbed.

A see also section is added, since the page had none and the substitute
character is a prerequisite for reading the first example.

Outputs verified on PHP 8.1, 8.4 and 8.5.

Fixes: #5562

* Unwrap examples and see also list from para

Changed paths:
  M  reference/mbstring/functions/mb-scrub.xml


Diff:

diff --git a/reference/mbstring/functions/mb-scrub.xml b/reference/mbstring/functions/mb-scrub.xml
index 2500e3002959..186b843ad056 100644
--- a/reference/mbstring/functions/mb-scrub.xml
+++ b/reference/mbstring/functions/mb-scrub.xml
@@ -71,6 +71,84 @@
   </informaltable>
  </refsect1>
 
+ <refsect1 role="examples">
+  &reftitle.examples;
+  <example>
+   <title>Byte-level replacement performed by <function>mb_scrub</function></title>
+   <simpara>
+    <function>bin2hex</function> is used here because terminals, browsers and
+    fonts may render an ill-formed byte sequence with a replacement character
+    of their own, which hides what the string actually contains.
+   </simpara>
+   <programlisting role="php">
+<![CDATA[
+<?php
+
+// The byte 0xFF cannot appear in a valid UTF-8 string.
+$input = "A\xFFB";
+echo bin2hex($input), "\n";
+
+// The default substitute character is "?" (0x3F).
+echo bin2hex(mb_scrub($input, 'UTF-8')), "\n";
+
+// U+FFFD REPLACEMENT CHARACTER is encoded as EF BF BD in UTF-8.
+mb_substitute_character(0xFFFD);
+echo bin2hex(mb_scrub($input, 'UTF-8')), "\n";
+
+?>
+]]>
+   </programlisting>
+   &example.outputs;
+   <screen>
+<![CDATA[
+41ff42
+413f42
+41efbfbd42
+]]>
+   </screen>
+  </example>
+  <example>
+   <title>Using <function>mb_scrub</function> before UTF-8 aware processing</title>
+   <simpara>
+    PCRE patterns using the <literal>u</literal> modifier reject subjects that
+    are not well-formed UTF-8. Scrubbing the input first makes it acceptable.
+   </simpara>
+   <programlisting role="php">
+<![CDATA[
+<?php
+
+$input = "A\xFFB";
+
+var_dump(preg_match_all('/./us', $input));
+echo preg_last_error_msg(), "\n";
+
+$clean = mb_scrub($input, 'UTF-8');
+
+var_dump(preg_match_all('/./us', $clean));
+
+?>
+]]>
+   </programlisting>
+   &example.outputs;
+   <screen>
+<![CDATA[
+bool(false)
+Malformed UTF-8 characters, possibly incorrectly encoded
+int(3)
+]]>
+   </screen>
+  </example>
+ </refsect1>
+
+ <refsect1 role="seealso">
+  &reftitle.seealso;
+  <simplelist>
+   <member><function>mb_substitute_character</function></member>
+   <member><function>mb_check_encoding</function></member>
+   <member><function>mb_convert_encoding</function></member>
+  </simplelist>
+ </refsect1>
+
 </refentry>
 <!-- Keep this comment at the end of the file
 Local variables:
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.