<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<refentry xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://docbook.org/ns/docbook" xml:id="function.chr">
 <refnamediv>
  <refname>chr</refname>
  <refpurpose>Generate a single-byte string from a number</refpurpose>
 </refnamediv>
 
 <refsect1 role="description">
  &reftitle.description;
  <methodsynopsis>
   <type>string</type><methodname>chr</methodname>
   <methodparam><type>int</type><parameter>codepoint</parameter></methodparam>
  </methodsynopsis>
  <para>
   Returns a one-character string containing the character specified
   by interpreting <parameter>codepoint</parameter> as an unsigned integer.
  </para>
  <para>
   This can be used to create a one-character string in a single-byte encoding such as ASCII, ISO-8859, or Windows 1252, by passing the position of a desired character in the encoding's mapping table. However, note that this function is not aware of any string encoding, and in particular cannot be passed a Unicode code point value to generate a string in a multibyte encoding like UTF-8 or UTF-16.
  </para>
  <para>
   This function complements <function>ord</function>. 
  </para>
 </refsect1>

 <refsect1 role="parameters">
  &reftitle.parameters;
  <para>
   <variablelist>
    <varlistentry>
     <term><parameter>codepoint</parameter></term>
     <listitem>
      <para>
       An integer between 0 and 255.
      </para>
      <para>
       Values outside the valid range (0..255) will be bitwise and'ed with 255,
       which is equivalent to the following algorithm:
       <programlisting role="php">
<![CDATA[
while ($bytevalue < 0) {
    $bytevalue += 256;
}
$bytevalue %= 256;
]]>
       </programlisting>
      </para>
     </listitem>
    </varlistentry>
   </variablelist>
  </para>
 </refsect1>

 <refsect1 role="returnvalues">
  &reftitle.returnvalues;
  <para>
   A single-character string containing the specified byte.
  </para>
 </refsect1>

 <refsect1 role="changelog">
  &reftitle.changelog;
  <informaltable>
   <tgroup cols="2">
    <thead>
     <row>
      <entry>&Version;</entry>
      <entry>&Description;</entry>
     </row>
    </thead>
    <tbody>
     <row>
      <entry>7.4.0</entry>
      <entry>
       The function no longer silently accepts unsupported <parameter>codepoint</parameter>s,
       and casts these to <literal>0</literal>.
      </entry>
     </row>
    </tbody>
   </tgroup>
  </informaltable>
 </refsect1>

 <refsect1 role="examples">
  &reftitle.examples;
  <para>
   <example>
    <title><function>chr</function> example</title>
    <programlisting role="php">
<![CDATA[
<?php
// Assumes the string will be used as ASCII or an ASCII-compatible encoding

$str = "The string ends in escape: ";
$str .= chr(27); /* add an escape character at the end of $str */

/* Often this is more useful */

$str = sprintf("The string ends in escape: %c", 27);
?>
]]>
    </programlisting>
   </example>
   <example>
    <title>Overflow behavior</title>
    <programlisting role="php">
<![CDATA[
<?php
echo chr(-159), chr(833), PHP_EOL;
?>
]]>
    </programlisting>
    &example.outputs;
    <screen>
<![CDATA[
aA
]]>
    </screen>
   </example>
  </para>
  <para> 
   <example>
    <title>Building a UTF-8 string from individual bytes</title>
    <programlisting role="php">
<![CDATA[
<?php
$str = chr(240) . chr(159) . chr(144) . chr(152);
echo $str;
?>
]]>
    </programlisting>
    &example.outputs;
    <screen>
🐘
    </screen>
   </example>
  </para>
 </refsect1>

 <refsect1 role="seealso">
  &reftitle.seealso;
  <para>
   <simplelist>
    <member><function>sprintf</function> with a format string of <literal>%c</literal></member>
    <member><function>ord</function></member>
    <member>An <link xlink:href="&url.asciitable;">ASCII-table</link></member>
    <member><function>mb_chr</function></member>
    <member><function>IntlChar::chr</function></member>
   </simplelist>
  </para>
 </refsect1>

</refentry>
<!-- 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
-->
