PHP中文问题——我胸口永远的痛 $test=ereg_replace("/".$key."/","<font color='red'>".$key."</font>",$str); 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 哦,看错了。 。不好意思。。我在EDITPLUS里看的也关注一下 preg_replace:本函式以 pattern 的规则来剖析比对字串 subject,欲取而代之的字串为参数 replacement。传回值为混合型态资料,为取代后的字串结果。 问题出在你的$key只有一个汉字。在此情况下,你可以preg_match_all("/[\x80-\xff]?./",$str,$ar); //分割成数组if(array_search($key,$ar)) //判断是否存在 这个问题不简单原以为中文字不存在会发生问题,但是尝试用存在的一个字"愔"来查找,发现也会出问题,更不爽的是我用五笔竟然打不出这个字。于是我想是否是编码方面的问题,尝试了一下用各种编码方式base64,utf8试了一下,一样不行。不知道百度是如何解决这个问题的。看了唠叨的帖子,想了想,也许可行,但实践证明也不行。期待高手!$str = '收昔在洛京,轻薄尤甚,人号云“魏收惊蛱蝶。”文襄曾游东山,令给事黄门侍郎颢等宴。文襄曰:“魏收恃才无宜适,须出其短。”往复数番,收忽大唱曰:“杨遵彦理屈已倒。”愔从容曰:“我绰有馀暇,山立不动,若遇当涂,恐翩翩遂逝。”当涂者魏,翩翩者蛱蝶也。文襄先知之,大笑称善。文襄又曰:“向语犹微,宜更指斥。”愔应声曰:“魏收在并作一篇诗,对众读讫,云:‘打从叔季景出六百斛米,亦不辨此。’远近所知,非敢妄语。”文襄喜曰:“我亦先闻。”众人皆笑。收虽自申雪,不复抗拒,终身病之。';$key="愔";preg_match_all("/[\x80-\xff]?./",$str,$ar); //分割成数组if(array_search($key,$ar)) //判断是否存在{ $test = str_replace($key,"<font color='red'>".$key."</font>",$str); echo $test;}else{ echo "没有找到";} 找到一篇相关文档http://www.tekinginfo.com/coding/forum/cndevforum0209_0309/subject_45302.htm 呵呵,手误!是$ar[0],不是$ar$key="愔";//$key="钟";preg_match_all("/[\x80-\xff]?./",$str,$str1);preg_match_all("/[\x80-\xff]?./",$key,$key1);$ar = array_intersect($str1[0],$key1[0]);print_r($ar); // 将得到$key1在$str1中的位置 烦请唠叨兄再多点提示:一、如果$key="文襄"或其他多余两个汉字的字符串,如何给能够匹配的字符加亮显示。二、如果$str中不仅仅是中文,还有英文,如何显示出来?具体例子如下:$str = '收昔在洛京,轻薄尤甚,人号云“魏收惊蛱蝶。”文襄曾游东山,abcdef令给事黄门侍郎颢等宴。文襄曰:“魏收恃才无宜适,须出其短。”往复数番,收忽大唱曰:“杨遵彦理屈已倒。”愔从容曰:“我绰有馀暇,山立不动,若遇当涂,恐翩翩遂逝。”当涂者魏,翩翩者蛱蝶也。文襄先知之,大笑称善。文襄又曰:“向语犹微,宜更指斥。”愔应声曰:“魏收在并作一篇诗,对众读讫,云:‘打从叔季景出六百斛米,亦不辨此。’远近所知,非敢妄语。”文襄喜曰:“我亦先闻。”众人皆笑。收虽自申雪,不复抗拒,终身病之。';$key = "文襄";如果找到了与$key相匹配的字符,如何显示出$key前后各若干个汉字的字符串,中英文都要显示出来。且将$key加亮。所需要的结果如下:...轻薄尤甚,人号云“魏收惊蛱蝶。”文襄曾游东山,abcdef令给事黄门侍郎颢等宴。<font color='red'>文襄</font>曰:“魏收恃才无宜适,须出其短。”往复数番,收忽大唱曰:“杨遵彦理屈已倒。”... 结果应该如下:...轻薄尤甚,人号云“魏收惊蛱蝶。”<font color='red'>文襄</font>曾游东山,abcdef令给事黄门侍郎颢等宴。<font color='red'>文襄</font>曰:“魏收恃才无宜适,须出其短。”往复数番,收忽大唱曰:“杨遵彦理屈已倒。”... 嗯?我是直接就用的str_replace()如果不行,可能是PHP的编码没有选对。例子:http://www.nhtip.com/special/bus.shtml查询一切正常。 如果涉及MySQL的话,MySQL的编码也要选对My.ini:[mysqld]加上 default-character-set=gb2312 TO:diekiss(阿峰)你可以拷贝我上面的例子试一下吗? $str = '收昔在洛京,轻薄尤甚,人号云“魏收惊蛱蝶。”文襄曾游东山,令给事黄门侍郎颢等宴。文襄曰:“魏收恃才无宜适,须出其短。”往复数番,收忽大唱曰:“杨遵彦理屈已倒。”愔从容曰:“我绰有馀暇,山立不动,若遇当涂,恐翩翩遂逝。”当涂者魏,翩翩者蛱蝶也。文襄先知之,大笑称善。文襄又曰:“向语犹微,宜更指斥。”愔应声曰:“魏收在并作一篇诗,对众读讫,云:‘打从叔季景出六百斛米,亦不辨此。’远近所知,非敢妄语。”文襄喜曰:“我亦先闻。”众人皆笑。收虽自申雪,不复抗拒,终钟身病之。';// 注意这里为测试方便将"终身病之。"改成了"终钟身病之。"// 请分别用不同的$key进行测试$key="愔";$key="钟";//$key = "文襄";if(strlen($key) > 2 || preg_match_all("/^[\x01-\x7f]+$/",$key,$p)) { // 当$key多于一个汉字或全为基本ascii字符时,可直接替换 echo str_replace($key,"<font color=red>$key</font>",$str);}else { preg_match_all("/[\x80-\xff]?./",$str,$str1); preg_match_all("/[\x80-\xff]?./",$key,$key1); $ar = array_intersect($str1[0],$key1[0]); // 获得交集 if(count($ar) > 0) { $str = $str1[0]; // 为简化书写 foreach($ar as $k=>$v) { $str[$k] = "<font color=red>$str[$k]</font>"; // 替换 } echo join("",$str); // 连接成串并输出 }} <?$str = "谓曰:“君有康济才,终不徒然。”便以子孙为托。及贵,追赠长司空,擢其子宁用之。神武自队主转为函使。尝乘驿过建兴,云雾昼晦,雷声随之,半日乃绝,若有牛神应者。每行道路,往来无风尘之色。又尝梦履众星而行,觉而内喜。";$key="牛";$test=str_replace($key," <font color='red'> ".$key."</font> ",$str);echo $test;?>把逗号去掉或者改成小写的就正常了 晕! <?//补充一点 呵呵$str = '收昔在洛京,轻薄尤甚,人号云“魏收惊蛱蝶。”文襄曾游东山,令给事黄门侍郎颢等宴。文襄曰:“魏收恃才无宜适,须出其短。”往复数番,收忽大唱曰:“杨遵彦理屈已倒。”愔从容曰:“我绰有馀暇,山立不动,若遇当涂,恐翩翩遂逝。”当涂者魏,翩翩者蛱蝶也。文襄先知之,大笑称善。文襄又曰:“向语犹微,宜更指斥。”愔应声曰:“魏收在并作一篇诗,对众读讫,云:‘打从叔季景出六百斛米,亦不辨此。’远近所知,非敢妄语。”文襄喜曰:“我亦先闻。”众人皆笑。收虽自申雪,不复抗拒,终钟身病之。';// 注意这里为测试方便将"终身病之。"改成了"终钟身病之。"// 请分别用不同的$key进行测试$key="你";//$key="钟";//$key = "文襄";if(strlen($key) > 2 || preg_match_all("/^[\x01-\x7f]+$/",$key,$p)) { // 当$key多于一个汉字或全为基本ascii字符时,可直接替换 echo str_replace($key,"<font color=red>$key</font>",$str);}else { preg_match_all("/[\x80-\xff]?./",$str,$str1); preg_match_all("/[\x80-\xff]?./",$key,$key1); $ar = array_intersect($str1[0],$key1[0]); // 获得交集 if(count($ar) > 0) { $str = $str1[0]; // 为简化书写 foreach($ar as $k=>$v) { $str[$k] = "<font color=red>$str[$k]</font>"; // 替换 } echo join("",$str); // 连接成串并输出 } else { echo $str; }}?> $string = '当$key多于一个汉字或全为基本ascii字符';我想得到这样一个数组arr('当','$','k','e','y','多','于','一','个'汉',字','或','全','为','基','本','a','s','c','i','i','字','符');请问如何实现? 上面已有preg_match_all("/[\x80-\xff]?./",$string,$arr); 关注,从今天开始也要成为PHP的人 to junyi2003(超级菜鸟) 是否死也要当PHP的鬼:) 再请教xuzuning(唠叨),你给出的代码是显示加亮后的所有字符串,能否只显示$key前后一定数量的字符串而非显示所有字符串,详细例子如下:具体例子如下:$str = '收昔在洛京,轻薄尤甚,人号云“魏收惊蛱蝶。”文襄曾游东山,abcdef令给事黄门侍郎颢等宴。文襄曰:“魏收恃才无宜适,须出其短。”往复数番,收忽大唱曰:“杨遵彦理屈已倒。”愔从容曰:“我绰有馀暇,山立不动,若遇当涂,恐翩翩遂逝。”当涂者魏,翩翩者蛱蝶也。文襄先知之,大笑称善。文襄又曰:“向语犹微,宜更指斥。”愔应声曰:“魏收在并作一篇诗,对众读讫,云:‘打从叔季景出六百斛米,亦不辨此。’远近所知,非敢妄语。”文襄喜曰:“我亦先闻。”众人皆笑。收虽自申雪,不复抗拒,终身病之。';$key = "文襄";...轻薄尤甚,人号云“魏收惊蛱蝶。”文襄曾游东山,abcdef令给事黄门侍郎颢等宴。<font color='red'>文襄</font>曰:“魏收恃才无宜适,须出其短。”往复数番,收忽大唱曰:“杨遵彦理屈已倒。”...再次感谢!!! 呵,试试真循环整个字窜,找到到存在的key.然后做记号.这种方法就是效率不高:(for($i=0;$i<count($str);$i++){ for($j=0,$numb=0;$i<count($key);$j++) { if(Ord($str[i])==Ord($key[j]))//判断每一个aci是否相等 { $numb++; } if($numb==(count($key)-1)) { //表示找到我需要的$key了,这时可以记录 $i 的值到另一数组变量里保存. } }}以上代码未经调试。只是一种想法. 求PHP关于AMF3的资料 ???奇怪的问题??? 如何获取 js 输入的 内容呢 phpmyadmin导出数据库遇到的一个怪问题,请教! PHP的include问题(希望曾经有个这样问题的兄弟们一起讨论) mysql数据库中什么字段表示布尔值? exec()函数不给执行 身份验证! php接收不了表单提交的参数,是怎么一回事啊? 望大神求助!修改了wamp的端口号,但是配置端站点的时候输入网址还是显示IIS7的界面 如何实现OA中的对WORD文档进行编辑的痕迹保留功能? 求一段正规MYSQL表达式~
也关注一下
preg_match_all("/[\x80-\xff]?./",$str,$ar); //分割成数组
if(array_search($key,$ar)) //判断是否存在
看了唠叨的帖子,想了想,也许可行,但实践证明也不行。期待高手!$str = '收昔在洛京,轻薄尤甚,人号云“魏收惊蛱蝶。”文襄曾游东山,令给事黄门侍郎颢等宴。文襄曰:“魏收恃才无宜适,须出其短。”往复数番,收忽大唱曰:“杨遵彦理屈已倒。”愔从容曰:“我绰有馀暇,山立不动,若遇当涂,恐翩翩遂逝。”当涂者魏,翩翩者蛱蝶也。文襄先知之,大笑称善。文襄又曰:“向语犹微,宜更指斥。”愔应声曰:“魏收在并作一篇诗,对众读讫,云:‘打从叔季景出六百斛米,亦不辨此。’远近所知,非敢妄语。”文襄喜曰:“我亦先闻。”众人皆笑。收虽自申雪,不复抗拒,终身病之。';
$key="愔";
preg_match_all("/[\x80-\xff]?./",$str,$ar); //分割成数组
if(array_search($key,$ar)) //判断是否存在
{
$test = str_replace($key,"<font color='red'>".$key."</font>",$str);
echo $test;
}
else
{
echo "没有找到";
}
http://www.tekinginfo.com/coding/forum/cndevforum0209_0309/subject_45302.htm
是$ar[0],不是$ar$key="愔";
//$key="钟";
preg_match_all("/[\x80-\xff]?./",$str,$str1);
preg_match_all("/[\x80-\xff]?./",$key,$key1);
$ar = array_intersect($str1[0],$key1[0]);
print_r($ar); // 将得到$key1在$str1中的位置
一、如果$key="文襄"或其他多余两个汉字的字符串,如何给能够匹配的字符加亮显示。
二、如果$str中不仅仅是中文,还有英文,如何显示出来?具体例子如下:$str = '收昔在洛京,轻薄尤甚,人号云“魏收惊蛱蝶。”文襄曾游东山,abcdef令给事黄门侍郎颢等宴。文襄曰:“魏收恃才无宜适,须出其短。”往复数番,收忽大唱曰:“杨遵彦理屈已倒。”愔从容曰:“我绰有馀暇,山立不动,若遇当涂,恐翩翩遂逝。”当涂者魏,翩翩者蛱蝶也。文襄先知之,大笑称善。文襄又曰:“向语犹微,宜更指斥。”愔应声曰:“魏收在并作一篇诗,对众读讫,云:‘打从叔季景出六百斛米,亦不辨此。’远近所知,非敢妄语。”文襄喜曰:“我亦先闻。”众人皆笑。收虽自申雪,不复抗拒,终身病之。';$key = "文襄";如果找到了与$key相匹配的字符,如何显示出$key前后各若干个汉字的字符串,中英文都要显示出来。且将$key加亮。所需要的结果如下:...轻薄尤甚,人号云“魏收惊蛱蝶。”文襄曾游东山,abcdef令给事黄门侍郎颢等宴。<font color='red'>文襄</font>曰:“魏收恃才无宜适,须出其短。”往复数番,收忽大唱曰:“杨遵彦理屈已倒。”...
...轻薄尤甚,人号云“魏收惊蛱蝶。”<font color='red'>文襄</font>曾游东山,abcdef令给事黄门侍郎颢等宴。<font color='red'>文襄</font>曰:“魏收恃才无宜适,须出其短。”往复数番,收忽大唱曰:“杨遵彦理屈已倒。”...
如果不行,可能是PHP的编码没有选对。
例子:
http://www.nhtip.com/special/bus.shtml查询一切正常。
default-character-set=gb2312
你可以拷贝我上面的例子试一下吗?
// 注意这里为测试方便将"终身病之。"改成了"终钟身病之。"
// 请分别用不同的$key进行测试$key="愔";
$key="钟";
//$key = "文襄";if(strlen($key) > 2 || preg_match_all("/^[\x01-\x7f]+$/",$key,$p)) {
// 当$key多于一个汉字或全为基本ascii字符时,可直接替换
echo str_replace($key,"<font color=red>$key</font>",$str);
}else {
preg_match_all("/[\x80-\xff]?./",$str,$str1);
preg_match_all("/[\x80-\xff]?./",$key,$key1);
$ar = array_intersect($str1[0],$key1[0]); // 获得交集
if(count($ar) > 0) {
$str = $str1[0]; // 为简化书写
foreach($ar as $k=>$v) {
$str[$k] = "<font color=red>$str[$k]</font>"; // 替换
}
echo join("",$str); // 连接成串并输出
}
}
$str = "谓曰:“君有康济才,终不徒然。”便以子孙为托。及贵,追赠长司空,擢其子宁用之。神武自队主转为函使。尝乘驿过建兴,云雾昼晦,雷声随之,半日乃绝,若有牛神应者。每行道路,往来无风尘之色。又尝梦履众星而行,觉而内喜。";
$key="牛";
$test=str_replace($key," <font color='red'> ".$key."</font> ",$str);
echo $test;
?>
把逗号去掉或者改成小写的就正常了 晕!
//补充一点 呵呵
$str = '收昔在洛京,轻薄尤甚,人号云“魏收惊蛱蝶。”文襄曾游东山,令给事黄门侍郎颢等宴。文襄曰:“魏收恃才无宜适,须出其短。”往复数番,收忽大唱曰:“杨遵彦理屈已倒。”愔从容曰:“我绰有馀暇,山立不动,若遇当涂,恐翩翩遂逝。”当涂者魏,翩翩者蛱蝶也。文襄先知之,大笑称善。文襄又曰:“向语犹微,宜更指斥。”愔应声曰:“魏收在并作一篇诗,对众读讫,云:‘打从叔季景出六百斛米,亦不辨此。’远近所知,非敢妄语。”文襄喜曰:“我亦先闻。”众人皆笑。收虽自申雪,不复抗拒,终钟身病之。';
// 注意这里为测试方便将"终身病之。"改成了"终钟身病之。"
// 请分别用不同的$key进行测试$key="你";
//$key="钟";
//$key = "文襄";if(strlen($key) > 2 || preg_match_all("/^[\x01-\x7f]+$/",$key,$p)) {
// 当$key多于一个汉字或全为基本ascii字符时,可直接替换
echo str_replace($key,"<font color=red>$key</font>",$str);
}else {
preg_match_all("/[\x80-\xff]?./",$str,$str1);
preg_match_all("/[\x80-\xff]?./",$key,$key1);
$ar = array_intersect($str1[0],$key1[0]); // 获得交集
if(count($ar) > 0) {
$str = $str1[0]; // 为简化书写
foreach($ar as $k=>$v) {
$str[$k] = "<font color=red>$str[$k]</font>"; // 替换
}
echo join("",$str); // 连接成串并输出
}
else {
echo $str;
}
}
?>
我想得到这样一个数组
arr('当','$','k','e','y','多','于','一','个'汉',字','或','全','为','基','本','a','s','c','i','i','字','符');
请问如何实现?
preg_match_all("/[\x80-\xff]?./",$string,$arr);
是否死也要当PHP的鬼:)
这种方法就是效率不高:(
for($i=0;$i<count($str);$i++)
{
for($j=0,$numb=0;$i<count($key);$j++)
{
if(Ord($str[i])==Ord($key[j]))//判断每一个aci是否相等
{
$numb++;
}
if($numb==(count($key)-1))
{
//表示找到我需要的$key了,这时可以记录 $i 的值到另一数组变量里保存.
}
}
}
以上代码未经调试。只是一种想法.