最简单的方法
<?php $str = \"0123ABCDFWS\",.?<>{}[]*&^%#@!~()+-|:;\"; echo \"$str\"; echo \"<br />\"; $str = preg_replace(\'/\\xa3([\\xa1-\\xfe])/e\', \'chr(ord(\\1)-0x80)\', $str); echo $str;
这是网上看来的代码,所有的中文标点的第二个字节减去0X80(即128)所得的数字就是半角所得的数字了。而/e模式表达的是:如果设定了此修正符,preg_replace() 在替换字符串中对逆向引用作正常的替换,将其作为 PHP 代码求值,并用其结果来替换所搜索的字符串。
在非UTF-8模式下这个函数是可行的,但是UTF-8下 这个方法就似乎无效,
方法二:
$queue = 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\');
echo preg_replace_callback(\"/([\\xEF][\\xBC][\\x90-\\x99]|[\\xEF][\\xBD][\\x81-\\x9A\\xA1-\\xBA])/\", \'next_fchar\', \'0\');
function next_fchar($matches){
global $queue;
return $queue[$matches[1]];
}
方法三:
/**
* 字符串半角和全角间相互转换
* @param string $str 待转换的字符串
* @param int $type TODBC:转换为半角;TOSBC,转换为全角
* @return string 返回转换后的字符串
*/
function convertStrType($str, $type) {
$dbc = array(
\'0\' , \'1\' , \'2\' , \'3\' , \'4\' ,
\'5\' , \'6\' , \'7\' , \'8\' , \'9\' ,
\'A\' , \'B\' , \'C\' , \'D\' , \'E\' ,
\'F\' , \'G\' , \'H\' , \'I\' , \'J\' ,
\'K\' , \'L\' , \'M\' , \'N\' , \'O\' ,
\'P\' , \'Q\' , \'R\' , \'S\' , \'T\' ,
\'U\' , \'V\' , \'W\' , \'X\' , \'Y\' ,
\'Z\' , \'a\' , \'b\' , \'c\' , \'d\' ,
\'e\' , \'f\' , \'g\' , \'h\' , \'i\' ,
\'j\' , \'k\' , \'l\' , \'m\' , \'n\' ,
\'o\' , \'p\' , \'q\' , \'r\' , \'s\' ,
\'t\' , \'u\' , \'v\' , \'w\' , \'x\' ,
\'y\' , \'z\' , \'-\' , \' \' , \':\' ,
\'.\' , \',\' , \'/\' , \'%\' , \'#\' ,
\'!\' , \'@\' , \'&\' , \'(\' , \')\' ,
\'<\' , \'>\' , \'"\' , \''\' , \'?\' ,
\'[\' , \']\' , \'{\' , \'}\' , \'\\' ,
\'|\' , \'+\' , \'=\' , \'_\' , \'^\' ,
\'¥\' , \' ̄\' , \'`\'
);
$sbc = array( //半角
\'0\', \'1\', \'2\', \'3\', \'4\',
\'5\', \'6\', \'7\', \'8\', \'9\',
\'A\', \'B\', \'C\', \'D\', \'E\',
\'F\', \'G\', \'H\', \'I\', \'J\',
\'K\', \'L\', \'M\', \'N\', \'O\',
\'P\', \'Q\', \'R\', \'S\', \'T\',
\'U\', \'V\', \'W\', \'X\', \'Y\',
\'Z\', \'a\', \'b\', \'c\', \'d\',
\'e\', \'f\', \'g\', \'h\', \'i\',
\'j\', \'k\', \'l\', \'m\', \'n\',
\'o\', \'p\', \'q\', \'r\', \'s\',
\'t\', \'u\', \'v\', \'w\', \'x\',
\'y\', \'z\', \'-\', \' \', \':\',
\'.\', \',\', \'/\', \'%\', \' #\',
\'!\', \'@\', \'&\', \'(\', \')\',
\'<\', \'>\', \'\"\', \'\\\'\',\'?\',
\'[\', \']\', \'{\', \'}\', \'\\\\\',
\'|\', \'+\', \'=\', \'_\', \'^\',
\'¥\',\'~\', \'`\'
);
if($type == \'TODBC\'){
return str_replace( $sbc, $dbc, $str ); //半角到全角
}elseif($type == \'TOSBC\'){
return str_replace( $dbc, $sbc, $str ); //全角到半角
}else{
return $str;
}
}
方法四:
/**
* 将一个字串中含有全角的数字字符、字母、空格或\'%+-()\'字符转换为相应半角字符
*
* @access public
* @param string $str 待转换字串
*
* @return string $str 处理后字串
*/
function make_semiangle($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);
}
全角与半角之区别(来自中文维基百科)
全角,又称全形、全宽,是电脑字符的一种格式,字面意思是比普通字符(或半角字符)宽的字符。
传统上,英语或拉丁字母语言使用一字节的空间来存储,而汉字、日语等常使用两字节存储,在使用固定宽度文字的地方,为了使字体看起来整齐,英文字母、数字及其他符号,也由原来只占用一个字空间,改为一概占用两个字的空间来显示,并且使用两个字节来存储。
以上所述就是本文的全部内容了,希望大家能够喜欢。
本文地址:https://www.stayed.cn/item/4301
转载请注明出处。
本站部分内容来源于网络,如侵犯到您的权益,请 联系我