©
Dokumen ini menggunakan Manual laman web PHP Cina Lepaskan
(PHP 4, PHP 5)
chr — 返回指定的字符
$ascii
)
返回相对应于 ascii
所指定的单个字符。
此函数与 ord() 是互补的。
ascii
Ascii 码。
返回规定的字符。
Example #1 chr() 例子
<?php
$str = "The string ends in escape: " ;
$str .= chr ( 27 );
$str = sprintf ( "The string ends in escape: %c" , 27 );
?>
[#1] synnus at gmail dot com [2015-09-10 20:34:41]
// rivencodec 1.0
// encode riverse ascii 1 simple function can encode/decode
// can use it for secure source with speed encode text
<?php
function rivencodec($ch,$a=0) {
while((@$b = $ch[$a++])) { $ch[$a-1] = chr(255-ord($b)); }
return $ch;
}
$zz = rivencodec("abcdefghijklmn");
echo 'encode: ',$zz,'<br/>',PHP_EOL;
$yy = rivencodec($zz);
echo 'decode: ',$yy,'<br/>',PHP_EOL;
?>
[#2] lingtalfi - at - somewhere [2015-06-13 06:09:48]
It seems that php uses the table from here: http://ascii-code.com/
(and not from here: http://www.asciitable.com/ as suggested in the documentation) for codes from 128 to 255.
<?php
for ($i = 32; $i <= 255; $i++) {
echo chr($i);
}
?>
[#3] fernandobasso dot br at gmail dot com [2015-05-01 21:24:43]
The help mentions a link to an ascii table. On some *nix systems you can simply do `man ascii`.
[#4] Pascal [2014-09-01 23:01:20]
function ascii2str($str) {
$arr=array(
" "=>' ', "!"=>'!', """=>'"', "#"=>'#', "$"=>'$',
"%"=>'%', "&"=>'&', "'"=>"'", "("=>'(', ")"=>')',
"*"=>'*', "+"=>'+', ","=>',', "-"=>'-', "."=>'.',
"/"=>'/', "0"=>'0', "1"=>'1', "2"=>'2', "3"=>'3',
"4"=>'4', "5"=>'5', "6"=>'6', "7"=>'7', "8"=>'8',
"9"=>'9', ":"=>':', ";"=>';', "<"=>'<', "="=>'=',
">"=>'>', "?"=>'?', "@"=>'@', "A"=>'A', "B"=>'B',
"C"=>'C', "D"=>'D', "E"=>'E', "F"=>'F', "G"=>'G',
"H"=>'H', "I"=>'I', "J"=>'J', "K"=>'K', "L"=>'L',
"M"=>'M', "N"=>'N', "O"=>'O', "P"=>'P', "Q"=>'Q',
"R"=>'R', "S"=>'S', "T"=>'T', "U"=>'U', "V"=>'V',
"W"=>'W', "X"=>'X', "Y"=>'Y', "Z"=>'Z', "["=>'[',
"\"=>'\\', "]"=>']', "^"=>'^', "_"=>'_', "`"=>'`',
"a"=>'a', "b"=>'b', "c"=>'c', "d"=>'d', "e"=>'e',
"f"=>'f', "g"=>'g', "h"=>'h', "i"=>'i', "j"=>'j',
"k"=>'k', "l"=>'l', "m"=>'m', "n"=>'n', "o"=>'o',
"p"=>'p', "q"=>'q', "r"=>'r', "s"=>'s', "t"=>'t',
"u"=>'u', "v"=>'v', "w"=>'w', "x"=>'x', "y"=>'y',
"z"=>'z', "{"=>'{', "|"=>'|', "}"=>'}', "~"=>'~'
);
return strtr($str,$arr);
}
[#5] v14t at gmx dot com [2014-04-01 05:58:14]
argument is automatically converted to integer, so chr('65') and chr(65) would both output the letter A
[#6] darek at module17 dot com [2013-03-07 07:45:05]
Simple password generation function using sprintf and the %c type specifier; which is the same as chr().
function genPass($len = 8) {
for ($i=0;$i<=$len;$i++) {
$passwd = sprintf('%s%c', isset($passwd) ? $passwd : NULL, rand(48, 122));
}
return $passwd;
}
[#7] krkbpk at gmail dot com RamaKrishna Kothamasu [2013-02-08 04:11:29]
//simple example for chr() function
<?php
$i=0;
for($i;$i<=255;$i++)
{
echo chr($i)."<br>";
}
?>
[#8] gjarrige at six-axe dot fr [2012-03-01 09:47:53]
to remove the ASCII control characters (except "line feed" and "tab") :
$tab_chr = array() ;
for($control = 0; $control < 32; $control++) {
if ($control != 9 && $control != 10) {
$tab_chr[]= chr($control) ;
}
}
$tab_chr[]= chr(127) ;
$string = str_replace($tab_chr, '', $string);
[#9] mailderemi at gmail dot com [2011-02-04 08:17:35]
Here is a sample of encoding and decoding using "chr" and "ord".
<?php
function Encode($txtData,$Level){
for ($j = 0;$j<$Level;$j++){
$tmpStr = '';
for ($i = 0;$i<strlen($txtData);$i++)
$tmpStr .= ord(substr(strtoupper($txtData), $i, 1));
$txtData = $tmpStr;
}
return (strlen($Level)).$Level.$txtData;
}
function Decode($txtData){
$intLevel = substr($txtData, 1, substr($txtData, 0, 1));
$startStr = substr($txtData, substr($txtData, 0, 1)+1, strlen($txtData));
for ($j = 0;$j<$intLevel;$j++){
for ($i = 0;$i<strlen($startStr);$i+=2)
$tmpStr .= chr(intval(substr($startStr, $i, 2)));
$startStr = $tmpStr;
$tmpStr = "";
}
return $startStr;
}
echo Encode('123',4).'<br>';
echo Decode(Encode('123',5));
?>
[#10] Emprivo.com [2009-09-01 07:36:11]
Replaces special characters with non-special equivalents
<?php
function normalize_special_characters( $str )
{
# Quotes cleanup
$str = ereg_replace( chr(ord("`")), "'", $str ); # `
$str = ereg_replace( chr(ord("?")), "'", $str ); # ?
$str = ereg_replace( chr(ord("?")), ",", $str ); # ?
$str = ereg_replace( chr(ord("`")), "'", $str ); # `
$str = ereg_replace( chr(ord("?")), "'", $str ); # ?
$str = ereg_replace( chr(ord("??")), "\"", $str ); # ??
$str = ereg_replace( chr(ord("??")), "\"", $str ); # ??
$str = ereg_replace( chr(ord("?")), "'", $str ); # ?
$unwanted_array = array( '?'=>'S', '?'=>'s', '?'=>'Z', '?'=>'z', '?'=>'A', '?'=>'A', '?'=>'A', '?'=>'A', '?'=>'A', '?'=>'A', '?'=>'A', '?'=>'C', '?'=>'E', '?'=>'E',
'?'=>'E', '?'=>'E', '?'=>'I', '?'=>'I', '?'=>'I', '?'=>'I', '?'=>'N', '?'=>'O', '?'=>'O', '?'=>'O', '?'=>'O', '?'=>'O', '?'=>'O', '?'=>'U',
'?'=>'U', '?'=>'U', '?'=>'U', '?'=>'Y', '?'=>'B', '?'=>'Ss', '??'=>'a', '??'=>'a', '?'=>'a', '?'=>'a', '?'=>'a', '?'=>'a', '?'=>'a', '?'=>'c',
'??'=>'e', '??'=>'e', '??'=>'e', '?'=>'e', '??'=>'i', '??'=>'i', '?'=>'i', '?'=>'i', '?'=>'o', '?'=>'n', '??'=>'o', '??'=>'o', '?'=>'o', '?'=>'o',
'?'=>'o', '?'=>'o', '??'=>'u', '??'=>'u', '?'=>'u', '?'=>'y', '?'=>'y', '?'=>'b', '?'=>'y' );
$str = strtr( $str, $unwanted_array );
# Bullets, dashes, and trademarks
$str = ereg_replace( chr(149), "•", $str ); # bullet ?
$str = ereg_replace( chr(150), "–", $str ); # en dash
$str = ereg_replace( chr(151), "—", $str ); # em dash
$str = ereg_replace( chr(153), "™", $str ); # trademark
$str = ereg_replace( chr(169), "©", $str ); # copyright mark
$str = ereg_replace( chr(174), "®", $str ); # registration mark
return $str;
}
?>
[#11] sinfocol at sinfocol dot org [2009-06-30 02:38:26]
The function chr() also accepts negative numbers as an ascii code, so chr(-number) is equal to chr((number%256)+256).
And for ascii code higher than 255 is chr(number%256)
We can test with a little script
<?php
for($i=-300; $i<300; $i++){
echo "Ascii $i\t" . ord(chr($i)) . "\n";
}
?>
[#12] voromax [2009-01-31 07:39:13]
Another quick and short function to get unicode char by its code.
<?php
function unichr($u) {
return mb_convert_encoding('&#' . intval($u) . ';', 'UTF-8', 'HTML-ENTITIES');
}
?>
[#13] jacob at loggy punt nl [2008-12-31 05:46:02]
This function creates a ascii table, and replaces all the ascii characters in the mail.
---
Deze functie maakt een ascii tabel, en zet alles juist om.
<?php
function makeASCII($a){
$find[] = "=\r\n";
$replace[] = "";
for($i=0; $i < 256; $i++){
$find[] = "=".dechex($i)."";
$replace[] = chr($i);
}
$a = str_replace($find,$replace,$a);
return $a;
}
?>
[#14] scott at quinlan dot co dot nz [2008-10-20 21:51:57]
Secure password generator with a variable maximum amount of symbols.
<?php
function passwdGen($minLength = 8, $maxLength = 12, $maxSymbols = 2)
{
$symbolCount = 0;
srand((double)microtime() * 1000003);
for ($i = 0; $i < rand($minLength, $maxLength); $i++)
{
do
{
$char = rand(33, 126);
$symbolCount += $isSymbol = (!in_array($char, range(48, 57)) && !in_array($char, range(65, 90)) && !in_array($char, range(97, 122)));
if ($symbolCount <= $maxSymbols || !$isSymbol)
{
break;
}
}
while (true);
$passwd = sprintf('%s%c', isset($passwd) ? $passwd : NULL, $char);
}
return $passwd;
}
?>
[#15] Josh B. [2008-08-12 14:06:47]
In addition to replacing Microsoft Windows smart quotes, as sgaston demonstrated on 2006-02-13, I replace all other Microsoft Windows characters using suggestions[1] published by character code specialist[2] Jukka Korpela.
<?php
$str = str_replace(chr(130), ',', $str); // baseline single quote
$str = str_replace(chr(131), 'NLG', $str); // florin
$str = str_replace(chr(132), '"', $str); // baseline double quote
$str = str_replace(chr(133), '...', $str); // ellipsis
$str = str_replace(chr(134), '**', $str); // dagger (a second footnote)
$str = str_replace(chr(135), '***', $str); // double dagger (a third footnote)
$str = str_replace(chr(136), '^', $str); // circumflex accent
$str = str_replace(chr(137), 'o/oo', $str); // permile
$str = str_replace(chr(138), 'Sh', $str); // S Hacek
$str = str_replace(chr(139), '<', $str); // left single guillemet
$str = str_replace(chr(140), 'OE', $str); // OE ligature
$str = str_replace(chr(145), "'", $str); // left single quote
$str = str_replace(chr(146), "'", $str); // right single quote
$str = str_replace(chr(147), '"', $str); // left double quote
$str = str_replace(chr(148), '"', $str); // right double quote
$str = str_replace(chr(149), '-', $str); // bullet
$str = str_replace(chr(150), '-', $str); // endash
$str = str_replace(chr(151), '--', $str); // emdash
$str = str_replace(chr(152), '~', $str); // tilde accent
$str = str_replace(chr(153), '(TM)', $str); // trademark ligature
$str = str_replace(chr(154), 'sh', $str); // s Hacek
$str = str_replace(chr(155), '>', $str); // right single guillemet
$str = str_replace(chr(156), 'oe', $str); // oe ligature
$str = str_replace(chr(159), 'Y', $str); // Y Dieresis
?>
[1] On the use of some MS Windows characters in HTML
http://www.cs.tut.fi/~jkorpela/www/windows-chars.html
[2] Unicode Explained by Jukka Korpela
http://www.amazon.com/dp/059610121X/
[#16] darkodemon at gmail dot com [2007-04-27 04:33:47]
chr() with unicode support
<?php
function uchr ($codes) {
if (is_scalar($codes)) $codes= func_get_args();
$str= '';
foreach ($codes as $code) $str.= html_entity_decode('&#'.$code.';',ENT_NOQUOTES,'UTF-8');
return $str;
}
echo uchr(23383); echo '<br/>';
echo uchr(23383,215,23383); echo '<br/>';
echo uchr(array(23383,215,23383,215,23383)); echo '<br/>';
?>
[#17] mwgamera at gmail dot com [2006-08-22 08:20:04]
Unicode version of chr() using mbstring
<?php
function unichr($u) {
return mb_convert_encoding(pack("N",$u), mb_internal_encoding(), 'UCS-4BE');
}
?>
It returns a string in internal encoding (possibly more than one byte).
[#18] JasonLauDotBiz [2006-02-16 19:34:05]
I didn't see it here, so here's simple random string generation using char.
<?php
for($i=0; $i<7; $i++){
$random_string .= chr(rand(0,25)+65);
}
echo $random_string;
?>
[#19] grey - greywyvern - com [2005-08-19 07:55:32]
I spent hours looking for a function which would take a numeric HTML entity value and output the appropriate UTF-8 bytes. I found this at another site and only had to modify it slightly; so I don't take credit for this.
<?php function unichr($dec) {
if ($dec < 128) {
$utf = chr($dec);
} else if ($dec < 2048) {
$utf = chr(192 + (($dec - ($dec % 64)) / 64));
$utf .= chr(128 + ($dec % 64));
} else {
$utf = chr(224 + (($dec - ($dec % 4096)) / 4096));
$utf .= chr(128 + ((($dec % 4096) - ($dec % 64)) / 64));
$utf .= chr(128 + ($dec % 64));
}
return $utf;
} ?>
So for example:
<?php
$str = "Chinese: 中文";
$str = preg_replace("/&#(\d{2,5});/e", "unichr($1);", $str);
?>
[#20] sarabas at itstudio dot pl [2005-02-17 04:26:32]
The following function helped me to generate ascii-only usernames from firstname/lastname containing iso-8859-2 characters. The convertion array was based on contents of 'man iso-8859-2'.
Example: iso2ascii("błażej.źdźbło") returns "blazej.zdzblo"
<?php
function iso2ascii($str) {
$arr=array(
chr(161)=>'A', chr(163)=>'L', chr(165)=>'L', chr(166)=>'S', chr(169)=>'S',
chr(170)=>'S', chr(171)=>'T', chr(172)=>'Z', chr(174)=>'Z', chr(175)=>'Z',
chr(177)=>'a', chr(179)=>'l', chr(181)=>'l', chr(182)=>'s', chr(185)=>'s',
chr(186)=>'s', chr(187)=>'t', chr(188)=>'z', chr(190)=>'z', chr(191)=>'z',
chr(192)=>'R', chr(193)=>'A', chr(194)=>'A', chr(195)=>'A', chr(196)=>'A',
chr(197)=>'L', chr(198)=>'C', chr(199)=>'C', chr(200)=>'C', chr(201)=>'E',
chr(202)=>'E', chr(203)=>'E', chr(204)=>'E', chr(205)=>'I', chr(206)=>'I',
chr(207)=>'D', chr(208)=>'D', chr(209)=>'N', chr(210)=>'N', chr(211)=>'O',
chr(212)=>'O', chr(213)=>'O', chr(214)=>'O', chr(216)=>'R', chr(217)=>'U',
chr(218)=>'U', chr(219)=>'U', chr(220)=>'U', chr(221)=>'Y', chr(222)=>'T',
chr(223)=>'s', chr(224)=>'r', chr(225)=>'a', chr(226)=>'a', chr(227)=>'a',
chr(228)=>'a', chr(229)=>'l', chr(230)=>'c', chr(231)=>'c', chr(232)=>'c',
chr(233)=>'e', chr(234)=>'e', chr(235)=>'e', chr(236)=>'e', chr(237)=>'i',
chr(238)=>'i', chr(239)=>'d', chr(240)=>'d', chr(241)=>'n', chr(242)=>'n',
chr(243)=>'o', chr(244)=>'o', chr(245)=>'o', chr(246)=>'o', chr(248)=>'r',
chr(249)=>'u', chr(250)=>'u', chr(251)=>'u', chr(252)=>'u', chr(253)=>'y',
chr(254)=>'t'
);
return strtr($str,$arr);
}
?>
[#21] tenyou at gmail dot com [2004-07-14 23:05:07]
When having to deal with parsing an IIS4 or IIS5 metabase dump I wrote a simple function for converting those MS hexidecimal values into their ascii counter parts. Hopefully someone will find use for it.
<?php
function hex_decode($string) {
for ($i=0; $i < strlen($string); $i) {
$decoded .= chr(hexdec(substr($string,$i,2)));
$i = (float)($i)+2;
}
return $decoded;
}
?>
[#22] perrodin at laposte dot net [2004-04-11 16:20:27]
Note that if the number is higher than 256, it will return the number mod 256.
For example :
chr(321)=A because A=65(256)
[#23] jgray at triangle dash solutions dot com [2003-07-25 10:20:58]
Lowercase alphabet:
<?php for($a=97;$a<(97+26);$a++){ echo chr($a); } ?>
[#24] infoserv at chollian dot net [2003-06-24 20:16:41]
Cutting Korean(2Byte)-String
<?php
function cutStr($str,$len){
if(strlen($str) > $len){
$str = substr($str,0,$len - 2);
if(strlen(substr(strrchr($str," "),1)) % 2)
$str = substr($str,0,strlen($str) - 1);
$str .= "..";
}
return $str;
}
?>
[#25] Kristin [2003-03-06 20:19:11]
Note that chr(10) is a 'line feed' and chr(13) is a 'carriage return' and they are not the same thing! I found this out while attempting to parse text from forms and text files for inclusion as HTML by replacing all the carriage returns with <BR>'s only to find after many head-scratchings that I should have been looking for line feeds. If anyone can shed some light on what the difference is, please do.
If you're planning on saving text from a form into a database for later display, you'll need to apply the following function so that it gets saved with the proper HTML tags.
<?php
$text = str_replace ( chr(10), "<BR>", $text );
?>
When you want to plug it back into that form for editing you need to convert it back.
<?php
$text = str_replace ( "<BR>", chr(10), $text)
?>
Hope this saves somebody some trouble. :)
[#26] joeldegan AT yahoo.com [2002-12-14 14:53:42]
Want terminal colors in command line php scripts?
This should take care of that.
<?php
$_colors = array(
'LIGHT_RED' => "[1;31m",
'LIGHT_GREEN' => "[1;32m",
'YELLOW' => "[1;33m",
'LIGHT_BLUE' => "[1;34m",
'MAGENTA' => "[1;35m",
'LIGHT_CYAN' => "[1;36m",
'WHITE' => "[1;37m",
'NORMAL' => "[0m",
'BLACK' => "[0;30m",
'RED' => "[0;31m",
'GREEN' => "[0;32m",
'BROWN' => "[0;33m",
'BLUE' => "[0;34m",
'CYAN' => "[0;36m",
'BOLD' => "[1m",
'UNDERSCORE' => "[4m",
'REVERSE' => "[7m",
);
function termcolored($text, $color="NORMAL", $back=1){
global $_colors;
$out = $_colors["$color"];
if($out == ""){ $out = "[0m"; }
if($back){
return chr(27)."$out$text".chr(27).chr(27)."[0m".chr(27);
}else{
echo chr(27)."$out$text".chr(27).chr(27)."[0m".chr(27);
}//fi
}// end function
echo termcolored("test\n", "BLUE");
?>
[#27] webmaster at project-enigma dot net [2002-04-13 12:51:42]
\n ==
Usefull if u want to display multi-line-alt-strings
e.g. <img src="/gifs/php_logo.gif" alt="Here u can see the PHPLogo 3rd line">
[#28] happyevil(at)1218.org [2001-03-26 19:31:01]
Here is a function that's help me find what chr(number) outputs what character quicker than typing out 256 echo tags.
<?php
function listChr(){
for ($i = 0; $i < 256; ++$i) {
static $genNum;
$genNum++;
echo "chr($genNum) will output '";
echo (chr($genNum));
echo "'< br>\n";
}
}
listChr();
?>
Another helpful chr is #9, being a tab. Quite using when making error logs.
$tab = (chr(9));
echo "<pre>error{$tab}date{$tab}time</pre>";
-- HappyEvil
[#29] ddawsonNOSPAM at execpc dot com [2000-05-09 16:59:24]
[Editor's note:
%c is defined as: "Print the character belonging to the ascii code given"
chr() just gives a string, so you need to use %s, even if the string consists of only one character. This is consistent with other languages.
--Jeroen@php.net]
Learn from my mistake:
Do not expect this to work!
<?php
$c_question = chr(63);
$v_out = sprintf("<%cphp\n", $c_question);
//... more stuff being sprintf'd into v_out here ...
$v_out = sprintf("%s%c>\n", $v_out, $c_question);
$v_fp = fopen("foofile", "w");
if ($v_fp)
{
fwrite($v_fp, $v_out, strlen($v_out));
fclose($v_fp);
}
?>
When I did this, foofile contained <NUL NUL NUL NUL NUL>.
I spun my wheels quite awhile looking at fputs, fwrite to verify I was calling those functions correctly.
My mistake was using $c_question = chr(63) instead of
$c_question = 63 (correct). Then everything worked fine.