代码如下:
/**
* php 提取html中图片并替换
* autho www.
*/
//要替换的内容
$content = '<img alt="" src="/blog_article/js/fckeditor/UserFiles/image/F201005201210502415831196.jpg" width="600" height="366"><br><br><br><br><img alt="" src="/blog_article/js/fckeditor/UserFiles/image/33_avatar_middle.jpg" width="120" height="120">';
//提取图片路径的src的正则表达式
preg_match_all("/<img(.*)src="/blog_article/([^/index.html"]+)"[^>]+>/isU",$content,$matches);
$img = "";
if(!emptyempty($matches)) {
//注意,上面的正则表达式说明src的值是放在数组的第三个中
$img = $matches[2];
}else {
$img = "";
}
if (!emptyempty($img)) {
$img_url = "http://".$_SERVER['SERVER_NAME'];
$patterns= array();
$replacements = array();
foreach($img as $imgItem){
$final_imgUrl = $img_url.$imgItem;
$replacements[] = $final_imgUrl;
$img_new = "/".preg_replace("/\//i","\/",$imgItem)."/";
$patterns[] = $img_new;
}
//让数组按照key来排序
ksort($patterns);
ksort($replacements);
//替换内容
$vote_content = preg_replace($patterns, $replacements, $content);
?>
大家也可以参考下php正则取图片路径与php取图片路径的正则写法,里面有关于用正则取内容中图片的方法,对理解以上的代码,会有所帮助的。
类似如下的字符串(GBK), explode()不能得到正确结果:
$result = explode("|", "滕华弢|海青");
究其原因, 对于”弢”字(读tao,不认识没关系,我也不认识), 因为他的GBK编码值为: 8f7c, 不巧的是, “|”的ASCII值也是7c.
还有一些类似的问题: 因为GBK编码的编码范围是: 0×8140-0xfefe, 所以, 理论上来说, 任何低字节是7c的字都会有这个问题, 比如:
倈(827c), 億(837c), 眧(b17c), 鍇(e57c).......等等等等
对于这样的情况,
第一, 可以采用转码到utf8, 然后explode, 再转回来, 这是比较麻烦的方法.
第二, 我们可以采用正则拿"匹配出"来代替"分离出":
preg_match_all("/([/x81-/xfe][/x40-/xfe])+/", $gbk_str, $matches);//写死编码
这样, $matches中0号索引对应的数组就是结果词的数组了..
以上就是有关php GBK编码问题的解决方法,不知是否可以解决您的问题,欢迎与大家沟通交流。
您可能感兴趣的文章:
php函数substr截取中文字符出现乱码的解决方法
php substr截断中文半个汉字乱码问题的解决方法
php乱码问题 utf8乱码杂谈
php截取中文字符串乱码如何解决呢
解决php截取utf-8中文字符串时乱码的问题
如何解决php中文字符乱码,中文字符入库乱码的问题
php中文字符串截断且无乱码的解决方法
有关php中文乱码的解决方法
php utf8 一半乱码的问题
我们知道,json_encode 是在5.2.0才作为标准扩展加入php的,我用的是php5.1.6,该扩展还未加进来。
不想再编译扩展了,于是自己用php实现json_encode,以下是实现代码,供大家学习参考。
代码如下:
/**
* php json_encode代码
* site http://www.
*/
function __json_encode( $data ) {
if( is_array($data) || is_object($data) ) {
$islist = is_array($data) && ( empty($data) || array_keys()($data) === range(0,count($data)-1) );
if( $islist ) {
$json = '[' . implode(',', array_map('__json_encode', $data) ) . ']';
} else {
$items = Array();
foreach( $data as $key => $value ) {
$items[] = __json_encode("$key") . ':' . __json_encode($value);
}
$json = '{' . implode(',', $items) . '}';
}
} elseif( is_string($data) ) {
# Escape non-printable or Non-ASCII characters.
# I also put the \\ character first, as suggested in comments on the 'addclashes' page.
$string = '"' . addcslashes()($data, "\\\"\n\r\t/" . chr(8) . chr(12)) . '"';
$json = '';
$len = strlen($string);
# Convert UTF-8 to Hexadecimal Codepoints.
for( $i = 0; $i < $len; $i++ ) {
$char = $string[$i];
$c1 = ord($char);
# Single byte;
if( $c1 <128 ) {
$json .= ($c1 > 31) ? $char : sprintf()("\\u%04x", $c1);
continue;
}
# Double byte
$c2 = ord($string[++$i]);
if ( ($c1 & 32) === 0 ) {
$json .= sprintf("\\u%04x", ($c1 - 192) * 64 + $c2 - 128);
continue;
}
# Triple
$c3 = ord($string[++$i]);
if( ($c1 & 16) === 0 ) {
$json .= sprintf("\\u%04x", (($c1 - 224) <<12) + (($c2 - 128) << 6) + ($c3 - 128));
continue;
}
# Quadruple
$c4 = ord($string[++$i]);
if( ($c1 & 8 ) === 0 ) {
$u = (($c1 & 15) << 2) + (($c2>>4) & 3) - 1;
$w1 = (54<<10) + ($u<<6) + (($c2 & 15) << 2) + (($c3>>4) & 3);
$w2 = (55<<10) + (($c3 & 15)<<6) + ($c4-128);
$json .= sprintf("\\u%04x\\u%04x", $w1, $w2);
}
}
} else {
# int, floats, bools, null
$json = strtolower()(var_export( $data, true ));
}
return $json;
}
?>