‘壹’ php中 提取中文字符首个拼音字母
$fchar = ord($s0{0}); //获取字符串的第一个字节
//判断是不是英文字符,如果是则直接返回该字母大写
if ($fchar >= ord(“A”) and $fchar <= ord(“z”))return strtoupper($s0{0});
//以下代码用字符编码转换函数,通过两种字符集编码转换的对比,判断字符串是哪种字符集
//最终取字符串为GB字符集
$s1 = @iconv(“UTF-8″, “GBK”, $s0);
$s2 = @iconv(“GBK”, “UTF-8″, $s1);
if ($s2 == $s0) {
$s = $s1;
} else {
$s = $s0;
}
//计算给出的字符串的前两个字节内码,然后再根据结果判断在GB字符集中的位置,从而根据位置与拼音的关系,最终得出拼音字母
$asc = ord($s{0}) * 256 + ord($s{1}) – 65536;
‘U’、‘V’对中文无效,以下是对H 拼音的计算:
if($asc>=-17922 and $asc<=-17418)return "H";
‘贰’ php如何输出中文json格式字符串
php如何输出中文json格式字符串
如何对json格式的字符串进行转换,php提供了两个函数:
json_encode 对变量进行 JSON 编码
json_decode 对 JSON 格式的字符串进行编码
下面看个实例:
$arr = ['a', 'b', 'c'];echo json_encode($arr);
输出为:
["a","b","c"]
但是,当我们在数组中放入中文的时候,就会出现问题:
$arr = [ '世界', '你好',
];echo json_encode($arr);
输出的结果为:
["\u4e16\u754c","\u4f60\u597d"]
这个结果显然不是我们想要的,但是为什么出现这个呢?
因为当我们的值中包含中文时,php对他进行json编码时底层会对中文进行unicode编码,导致结果不可读,那该怎么解决呢?
方法一
可以利用 urlencode 和 urldecode 方法绕过这个转码为 unicode 的过程,先将中文字段进行urlencode,然后json_encode,最后再用urldecode处理结果,便可以正常显示中文。具体代码如下:
$arr = [ '世界', '你好',
];echo urldecode(json_encode(array_map('urlencode', $arr)));
输出结果为:
["世界","你好"]
方法二
自PHP5.4版本,官方就已经给Json新增了一个选项: JSON_UNESCAPED_UNICODE。加上这个选项后,就不会自动把中文编码了。具体代码如下:
$arr = [ '世界', '你好',
];echo json_encode($arr, JSON_UNESCAPED_UNICODE);
["世界","你好"]
看吧,这才是我们想要的结果 :)
‘叁’ php关于截取中文字符串的问题
php中文乱码的原因及解决方法
原因:1.php页面语言本身的编码类型不合适,这时候,你直接在脚本中写的中文肯定是乱码,不用说数据库了;
解决方法:选择'utf8'或者'薯郑gb2312',这样客户浏览器会自动选择并出现正确的中文显示。注意:'utf8'或者'gb2312'都可以正确显示中文的。
2.数据库mysql中的编码类型不正确。
解决方法:创建数据库的时候,mysql
字符集选择'utf8',mysql
连接校对选择utf8_general_ci,这样创建的数据库用来存储中文肯定没有问题,
否则,你的中文首先在mysql中就是乱码,更不要期望它会给你在php页面中显示正确。
3.与平时的脚本编辑握辩环境有关。比如,有些内容是自己用word写的,有些是用记事本写的,有些用editplus、ultraplus等文本编辑器。有时候就直接在dw中写中文了,
这样做不出乱码才怪呢。
解决方法:尽量用同一种编辑器。如果是拷贝来得既有的内容,建议用ultraplus中的编码转换功能把它转换成utf8或者gb2312。
到底转换成什么类型并不重要,关键要求你的php
web应用程序中的编码要一致就行。
4.编程访问
mysql时,建议添加段手缺一行代码:mysql_query("set
names
'gbk'");
这是解决方法
我没看懂你贴上来的程序
所以给你一些方法去解决乱码的问题
希望可以帮得上
‘肆’ UTF-8正则表达式如何匹配汉字,utf-8正则表达式_PHP教程
判断输入内容是否含有违法字符,请看下面代码
$str = "编程";
if(!preg_match("/^[\x{4e00}-\x{9fa5}]+$/u",$str))
{
echo "您输入的[".$str."]含有违法字符";
}
else
{
echo "您输入的[".$str."]完全合法,通过!";
}
-----------------------
UTF-8匹配:在javascript中,要判断字符串是中文是很简单的。
比如:
代码如下:
var str = "php编程";
if (/^[\u4e00-\u9fa5]+$/.test(str))
{
alert("该字符串全部是中文");
}
else
{
alert("该字符串不全部是中文");
}
php中,是用\x表示十六进制数据的。
于是,变换成如下的代码:
代码如下:
$str = "php编程";
if (preg_match("/^[\x4e00-\x9fa5]+$/",$str))
{
print("该字符串全部是中文");
}
else
{
print("该字符串不全部是中文");
}
貌似不报错了,判断的结果也正确,不过把$str换成“编程”两字,结果却还是显示“该字符串不全部是中文”,看来这样的判断还是不够准确。
重要:
查阅了《精通正则表达式》发现,对于[\x4e00-\x9fa5]这块东西,自己做一个强化的解释php的正则中, [\x4e00-\x9fa5],其实就是 字符和字符组的概念, \x{hex},表达一个16进制数, 需要注意的是hex 可以是1-2位的,也可以是4位的,但是如果是4位的必须加上大括号,同时,如果是大于x{FF}的hex,必须和u 修饰符连用,不然会非法出错
网上只能找到匹配全角字符的正则: ^[\x80-\xff]*^/ ,这里可以不加大括号 [\u4e00-\u9fa5]可以匹配中文,但是PHP又不支持 不过,既然\x表示的十六进制数据,为什么和js里边提供的范围\x4e00-\x9fa5不一样呢?
于是我就换成了下边的代码,发现真的准确了:
代码如下:
$str = "php编程";
if (preg_match("/^[\x{4e00}-\x{9fa5}]+$/u",$str))
{
print("该字符串全部是中文");
}
else
{
print("该字符串不全部是中文");
}
知道了php中utf-8编码下用正则表达式匹配汉字的最终正确表达式——/^[\x{4e00}-\x{9fa5}]+$/u, 参考以上文章写了如下一段测试代码(复制以下代码保存成.php文件)
<?php
$action = trim($_GET['action']);
if($action == "sub")
{
$str = $_POST['dir'];
if(!preg_match("/^[\x{4e00}-\x{9fa5}A-Za-z0-9_]+$/u",$str))
{
echo "您输入的[".$str."]含有违法字符";
}
else
{
echo "您输入的[".$str."]完全合法,通过!";
}
}
GBK:
代码如下:
preg_match("/^[".chr(0xa1)."-".chr(0xff)."A-Za-z0-9_]+$/",$str); //GB2312汉字字母数字下划线正则表达式
以上内容就是PHP中UTF-8正则表达式如何匹配汉字的全部内容,希望大家喜欢。
‘伍’ php字符串查找位置 php字符串查找
在PHP中查找字符串的位置或判断字符串是否存在的方法如下:
使用strpos()函数查找字符串位置:
判断字符串中是否包含另一个字符串:
使用strrpos()函数查找字符串最后一次出现的位置:
使用strstr()函数判断子串是否存在:
注意事项:
以上方法提供了在PHP中查找字符串位置或判断字符串是否存在的多种方式,根据具体需求选择合适的方法即可。