Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
116 changes: 116 additions & 0 deletions reference/filter/constants.callback.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,116 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: a109099b7deda187b68d43d8a90393620eaeb8e1 Maintainer: takagi Status: ready -->
<!-- Credits: mumumu -->
<section xml:id="filter.constants.callback" xmlns="http://docbook.org/ns/docbook">
<title>ユーザー定義のフィルタ</title>
&extension.constants;
<variablelist>
<varlistentry xml:id="constant.filter-callback">
<term>
<constant>FILTER_CALLBACK</constant>
(<type>int</type>)
</term>
<listitem>
<simpara>
このフィルタは、フィルタリング処理をユーザー定義の関数に委譲します。
<parameter>options</parameter> パラメータの <literal>'options'</literal>
キー経由で <type>callable</type> を渡します。
</simpara>
<para>
コールバックは、以下のシグネチャを持ちます:
<methodsynopsis>
<type>mixed</type><methodname><replaceable>callback</replaceable></methodname>
<methodparam><type>string</type><parameter>value</parameter></methodparam>
</methodsynopsis>
<variablelist role="function_parameters">
<varlistentry>
<term><parameter>value</parameter></term>
<listitem>
<simpara>
フィルタされる値
</simpara>
</listitem>
</varlistentry>
</variablelist>
</para>
<note>
<simpara>
コールバックから返される値が、
フィルタ関数の呼び出しで返される値になります。
</simpara>
</note>
<example>
<title>
ログイン名を検証するために
<constant>FILTER_CALLBACK</constant>
を使う例
</title>
<programlisting role="php">
<![CDATA[
<?php
function validate_login(string $value): ?string
{
if (strlen($value) >= 5 && ctype_alnum($value)) {
return $value;
}
return null;
}

$login = "val1dL0gin";
$filtered_login = filter_var($login, FILTER_CALLBACK, ['options' => 'validate_login']);
var_dump($filtered_login);

$login = "f&ke login";
$filtered_login = filter_var($login, FILTER_CALLBACK, ['options' => 'validate_login']);
var_dump($filtered_login);
?>
]]>
</programlisting>
&example.outputs;
<screen>
<![CDATA[
string(10) "val1dL0gin"
NULL
]]>
</screen>
</example>
<note>
<simpara>
PHP 8.1.25 および 8.2.12 以降では、構造に関するフラグ
<constant>FILTER_REQUIRE_ARRAY</constant>、<constant>FILTER_FORCE_ARRAY</constant>、<constant>FILTER_REQUIRE_SCALAR</constant>
がこのフィルタに適用され、
<constant>FILTER_NULL_ON_FAILURE</constant> を指定すると、
こうした構造上の失敗の報告方法が変わります。
これより前のバージョンでは、すべてのフラグが無視されていました。
フィルタ固有のフラグは常に無視されます。
また、コールバックの戻り値がそのまま結果になるので、
コールバック自体が失敗することはありません。
つまり、コールバックが返した <literal>false</literal> を
&null; や例外に変えるフラグはありません。
</simpara>
</note>
</listitem>
</varlistentry>
</variablelist>
</section>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->
112 changes: 112 additions & 0 deletions reference/filter/constants.flags.generic.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,112 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: a109099b7deda187b68d43d8a90393620eaeb8e1 Maintainer: takagi Status: ready -->
<!-- Credits: mumumu -->
<section xml:id="filter.constants.flags.generic" xmlns="http://docbook.org/ns/docbook">
<title>一般的なフィルタフラグ</title>
&extension.constants;
<variablelist>
<varlistentry xml:id="constant.filter-flag-none">
<term>
<constant>FILTER_FLAG_NONE</constant>
(<type>int</type>)
</term>
<listitem>
<simpara>
フィルタしない。
</simpara>
</listitem>
</varlistentry>
<varlistentry xml:id="constant.filter-require-scalar">
<term>
<constant>FILTER_REQUIRE_SCALAR</constant>
(<type>int</type>)
</term>
<listitem>
<simpara>
フィルタの入力値がスカラーであることを要求するフラグ。
</simpara>
</listitem>
</varlistentry>
<varlistentry xml:id="constant.filter-require-array">
<term>
<constant>FILTER_REQUIRE_ARRAY</constant>
(<type>int</type>)
</term>
<listitem>
<simpara>
フィルタの入力値が配列であることを要求するフラグ。
</simpara>
</listitem>
</varlistentry>
<varlistentry xml:id="constant.filter-force-array">
<term>
<constant>FILTER_FORCE_ARRAY</constant>
(<type>int</type>)
</term>
<listitem>
<simpara>
配列を操作するフィルタのために、
スカラーの入力を配列でラップし、
要素を一つ持つ配列にします。
</simpara>
</listitem>
</varlistentry>
<varlistentry xml:id="constant.filter-null-on-failure">
<term>
<constant>FILTER_NULL_ON_FAILURE</constant>
(<type>int</type>)
</term>
<listitem>
<simpara>
失敗時には、&false; ではなく &null; を返します。
</simpara>
<simpara>
任意の検証フィルタ
<constant>FILTER_VALIDATE_<replaceable>*</replaceable></constant>
と一緒に使うと便利です。
</simpara>
</listitem>
</varlistentry>
<varlistentry xml:id="constant.filter-throw-on-failure">
<term>
<constant>FILTER_THROW_ON_FAILURE</constant>
(<type>int</type>)
</term>
<listitem>
<simpara>
検証フィルタが失敗した際に、&false; を返す代わりに
<exceptionname>Filter\FilterFailedException</exceptionname> をスローします。
</simpara>
<simpara>
任意の検証フィルタ
<constant>FILTER_VALIDATE_<replaceable>*</replaceable></constant>
と一緒に使えます。
</simpara>
<simpara>
PHP 8.5.0 以降で利用可能です。
</simpara>
</listitem>
</varlistentry>
</variablelist>
</section>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->
120 changes: 120 additions & 0 deletions reference/filter/constants.flags.sanitization.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: a109099b7deda187b68d43d8a90393620eaeb8e1 Maintainer: takagi Status: ready -->
<!-- Credits: mumumu -->
<section xml:id="filter.constants.flags.sanitization" xmlns="http://docbook.org/ns/docbook">
<title>除去フィルタのフラグ</title>
&extension.constants;
<variablelist>
<varlistentry xml:id="constant.filter-flag-strip-low">
<term>
<constant>FILTER_FLAG_STRIP_LOW</constant>
(<type>int</type>)
</term>
<listitem>
<simpara>
ASCII 値が 32 未満の文字を取り除きます。
</simpara>
</listitem>
</varlistentry>
<varlistentry xml:id="constant.filter-flag-strip-high">
<term>
<constant>FILTER_FLAG_STRIP_HIGH</constant>
(<type>int</type>)
</term>
<listitem>
<simpara>
ASCII 値が 127 より大きい文字を取り除きます。
</simpara>
</listitem>
</varlistentry>
<varlistentry xml:id="constant.filter-flag-strip-backtick">
<term>
<constant>FILTER_FLAG_STRIP_BACKTICK</constant>
(<type>int</type>)
</term>
<listitem>
<simpara>
バッククォート文字(<literal>`</literal>)を取り除きます。
</simpara>
</listitem>
</varlistentry>
<varlistentry xml:id="constant.filter-flag-encode-low">
<term>
<constant>FILTER_FLAG_ENCODE_LOW</constant>
(<type>int</type>)
</term>
<listitem>
<simpara>
ASCII 値が 32 未満の文字をエンコードします。
</simpara>
</listitem>
</varlistentry>
<varlistentry xml:id="constant.filter-flag-encode-high">
<term>
<constant>FILTER_FLAG_ENCODE_HIGH</constant>
(<type>int</type>)
</term>
<listitem>
<simpara>
ASCII 値が 127 より大きい文字をエンコードします。
</simpara>
</listitem>
</varlistentry>
<varlistentry xml:id="constant.filter-flag-encode-amp">
<term>
<constant>FILTER_FLAG_ENCODE_AMP</constant>
(<type>int</type>)
</term>
<listitem>
<simpara>
<literal>&amp;</literal> をエンコードします。
</simpara>
</listitem>
</varlistentry>
<varlistentry xml:id="constant.filter-flag-no-encode-quotes">
<term>
<constant>FILTER_FLAG_NO_ENCODE_QUOTES</constant>
(<type>int</type>)
</term>
<listitem>
<simpara>
<literal>'</literal> および <literal>"</literal> をエンコードしません。
</simpara>
</listitem>
</varlistentry>
<varlistentry xml:id="constant.filter-flag-empty-string-null">
<term>
<constant>FILTER_FLAG_EMPTY_STRING_NULL</constant>
(<type>int</type>)
</term>
<listitem>
<simpara>
<!-- TODO Document/check which filters accept this flag (FILTER_UNSAFE_RAW and FILTER_SANITIZE_STRING only) -->
除去フラグを適用した結果が空文字列だった場合、
その値を &null; に変換します。
</simpara>
</listitem>
</varlistentry>
</variablelist>
</section>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->
Loading
Loading