来自:http://cn.voidcc.com/question/p-rjdaikmm-ra.html
ASCII编码是计算机所能显示字符的编码,它的取值范围是0-255,其中包括标点、字母、数字、汉字等。在编程过程中,经常把指定的字符转化为ASCII码进行比较。
cat a.php
输出:9 就是ASCII码的:09 水平定位符号
ASCII码表:http://ascii.911cha.com/?year=09
php a.php
最后,发现用终端复制就行,用vscode就不行,经下面这段代码测试,发现是终端可以输出\n这种不可见字符,而vscode在复制时这个没了,于是word就会出现错乱。
直接终端复制就可以。
也可php aaaa.php|pbcopy
即使不加换行\n,也能正常粘贴到表格里。
php aaaa.php|pbcopy #证明pbcopy 会在行尾加换行。
下面是PHP提供的转换ASCII码和字符的函数。
1.chr()函数
该函数用于将ASCII码值转化为字符串。其函数声明如下:
string chr (int ascii);
2.ord()函数
该函数用于将字符串转化为ASCII码值。其函数声明如下:
int ord(string str);
示例:
使用chr()函数和ord()函数进行字符串与ASCII码之间的转换,程序代码如下:
<?php
$str1=chr(88);
echo $str1; //返回值为X
echo "t";
$str2=ord('S');
echo $str2; //返回值为83
?>
中文字符截取$str1=chr(88);
echo $str1; //返回值为X
echo "t";
$str2=ord('S');
echo $str2; //返回值为83
?>
ord() chr() int() intval() 的区别
ord()->本函数返回字符的 ASCII (美国国家标准交换码) 序数值。本函数和 chr() 函数相反
php chr() ord()中文截取乱码问题解决方法
<?php
$lenth = 19;
$str = "怎么将新闻的很长的标题只显示前面一些字,后面用.....来代替?";
echo strlen($str)<=$lenth ? $str : (substr($str,0,$lenth).chr(0)."....");
?>
$lenth = 19;
$str = "怎么将新闻的很长的标题只显示前面一些字,后面用.....来代替?";
echo strlen($str)<=$lenth ? $str : (substr($str,0,$lenth).chr(0)."....");
?>
<?
/*
@ 另一种方法,使用ord()函数:
@ 适用于 gb2312 编码:
*/
$str = "怎么将新闻的很长的标题只显示前面一些字,后面用.....来代替?";
function gb2312_substr($str, $limit) {
$restr ='';
for($i=0;$i< $limit-3;$i++) {
$restr .= ord($str[$i])>127 ? $str[$i].$str[++$i] : $str[$i];
}
return $restr;
}
/*
@ 以下仅适用于 utf-8 编码;
*/
function utf8_substr($str, $limit) {
$restr = '';
for($i=0;$i< $limit-3;$i++) {
$restr .= ord($str[$i])>127 ? $str[$i].$str[++$i].$str[++$i] : $str[$i];
}
return $restr;
}
/*
@ 另一种方法,使用ord()函数:
@ 适用于 gb2312 编码:
*/
$str = "怎么将新闻的很长的标题只显示前面一些字,后面用.....来代替?";
function gb2312_substr($str, $limit) {
$restr ='';
for($i=0;$i< $limit-3;$i++) {
$restr .= ord($str[$i])>127 ? $str[$i].$str[++$i] : $str[$i];
}
return $restr;
}
/*
@ 以下仅适用于 utf-8 编码;
*/
function utf8_substr($str, $limit) {
$restr = '';
for($i=0;$i< $limit-3;$i++) {
$restr .= ord($str[$i])>127 ? $str[$i].$str[++$i].$str[++$i] : $str[$i];
}
return $restr;
}
另外一种方法:
/**
* 截取UTF-8编码下字符串的函数
*
* @access public
* @param string $str 被截取的字符串
* @param int $start 截取的起始位置
* @param int $length 截取的长度
* @param bool $append 是否附加省略号
* @return null
*/
function sub_str($str, $start=0, $length=0, $append=true)
{
$str = trim($str);
$reval = '';
if (0 == $length)
{
$length = strlen($str);
}
elseif (0 > $length)
{
$length = strlen($str) + $length;
}
if (strlen($str) <= $length) return $str;
for($i = 0; $i < $length; $i++)
{
if (!isset($str[$i])) break;
if (196 <= ord($str[$i]))
{
$i += 2 ;
$start += 2;
}
}
if ($i >= $start) $reval = substr($str, 0, $i);
if ($i < strlen($str) && $append) $reval .= "...";
return $reval;
}
//解释下上面第一个:chr(0)不是null,null是什么都没有,而chr(0)的值是0。表示成16进制是0x00,表示成二进制是00000000虽然chr(0)不会显示出什么,但是他是一个字符。虽然chr(0)不会显示出什么,但是他是一个字符。当汉字被截断时,根据编码规则他总是要把后边的其他字符拉过来一起作为汉字解释,这就是出现乱码的原因。 * 截取UTF-8编码下字符串的函数
*
* @access public
* @param string $str 被截取的字符串
* @param int $start 截取的起始位置
* @param int $length 截取的长度
* @param bool $append 是否附加省略号
* @return null
*/
function sub_str($str, $start=0, $length=0, $append=true)
{
$str = trim($str);
$reval = '';
if (0 == $length)
{
$length = strlen($str);
}
elseif (0 > $length)
{
$length = strlen($str) + $length;
}
if (strlen($str) <= $length) return $str;
for($i = 0; $i < $length; $i++)
{
if (!isset($str[$i])) break;
if (196 <= ord($str[$i]))
{
$i += 2 ;
$start += 2;
}
}
if ($i >= $start) $reval = substr($str, 0, $i);
if ($i < strlen($str) && $append) $reval .= "...";
return $reval;
}
?>
ord.php:
[/code]
<?php
$a = chr(0);
printf("0x%x",$a);
?>
$a = chr(0);
printf("0x%x",$a);
?>
# php ord.php
0x0
来源:http://www.freesear.com/read.php?tid=4461
作者:jackxiang@向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除
地址:http://jackxiang.com/post/3722/
版权所有。转载时必须以链接形式注明作者和原始出处及本声明!
最后编辑: jackxiang 编辑于2022-4-26 17:22
评论列表