json_encode不支持中文解决方法

 更新时间:2016年11月25日 15:58  点击:1880

/************************************************************** 

02  * 

03  *    使用特定function对数组中所有元素做处理 

04  *    @param    string    &$array        要处理的字符串 

05  *    @param    string    $function    要执行的函数 

06  *    @return boolean    $apply_to_keys_also        是否也<SPAN class=t_tag onclick=tagshow(event) href="tag.php教程?name=%D3%A6%D3%C3">应用</SPAN>到key上 

07  *    @access public 

08  * 

09  *************************************************************/

10 function arrayRecursive(&$array, $function, $apply_to_keys_also = false) 

11 { 

12     foreach ($array as $key => $value) { 

13         if (is_array($value)) { 

14             arrayRecursive($array[$key], $function, $apply_to_keys_also); 

15         } else { 

16             $array[$key] = $function($value); 

17         } 

18   

19         if ($apply_to_keys_also && is_string($key)) { 

20             $new_key = $function($key); 

21             if ($new_key != $key) { 

22                 $array[$new_key] = $array[$key]; 

23                 unset($array[$key]); 

24             } 

25         } 

26     } 

27 } 

28   

29 /************************************************************** 

30  * 

31  *    将数组转换为JSON字符串(兼容中文) 

32  *    @param    array    $array        要转换的数组 

33  *    @return string        转换得到的json字符串 

34  *    @access public 

35  * 

36  *************************************************************/

37 function JSON($array) { 

38     arrayRecursive($array, 'urlencode', true); 

39     $json = json_encode($array); 

40     return urldecode($json); 

41 }

<?php教程
// Ask for Input
fwrite(STDOUT, "Please Select Option(Default is Find) [1]Find [2]Replace Please Input Number: ");

// Get Input
$todo = trim(fgets(STDIN));
if(empty($todo)) $todo =1;
if($todo != 1 && $todo !=2){
    echo "Selected Error! ";
    exit;
}
if($todo==1){
    fwrite(STDOUT,"Please Input Find Directory(Default is Current Directory):");
    $dir = trim(fgets(STDIN));
    if(empty($dir)){
        $dir = getcwd();//当前目录
    }else{
        if(!is_dir($dir)){
            echo "Directory Not Exist! ";
            exit;
        }
    }
    fwrite(STDOUT,"Please Input Content of the Find:");
    $search = trim(fgets(STDIN));
    echo "In Directory'".$dir."'Find'".$search."',Please Wait... ";
    exec("find ".$dir." -exec grep --exclude='*.svn/*' -- '".$search."' {} +",$output);
    foreach($output as $val){
        echo "$val ";
    }
}else{// write input back
    fwrite(STDOUT, "Please Input Find Directory(Default is Current Directory):");
    $dir = trim(fgets(STDIN));
    if(empty($dir)){
        $dir = getcwd();//当前目录
    }else{
        if(!is_dir($dir)){
            echo "Directory Not Exist! ";
            exit;
        }
    }
    fwrite(STDOUT,"Please Input Prefix(Default is php):");
    $ext = trim(fgets(STDIN));
    if(empty($ext)) $ext = 'php';
    fwrite(STDOUT,"Please Input Find Content:");
    $search = trim(fgets(STDIN));
    fwrite(STDOUT,"Please Input Replace Content:");
    $replace = trim(fgets(STDIN));
    echo "正在目录'".$dir."'查找后缀为'".$ext."'的文件,将内容'".$search."'替换为'".$replace."',请稍后... ";
    exec("find ".$dir." -name '*.".$ext."'  -exec sed --in-place 's/".$search."/$replace/g' {} ;");
    echo "Replace Completed! ";
}
?>

 

AdodbZip1.1有更新,更新了下载地址。

 


SmartyZip,一个Smarty的装载类
<?php教程

// 设定参数
SmartyZip::$zip_url = 'http://www.smarty.net教程/distributions/Smarty-2.6.26.zip'; //[设置项]Smarty的Zip文件下载地址
SmartyZip::$zip_file = sys_get_temp_dir () . preg_replace ( '/^.*/(Smarty-.*.zip)$/i', 'smarty/$1', SmartyZip::$zip_url ); //[设置项]Smarty的Zip文件缓存位置
SmartyZip::$entry_dir = preg_replace ( '/^.*/(Smarty-.*).zip$/i', '$1/libs', SmartyZip::$zip_file );
SmartyZip::$extract_dir = sys_get_temp_dir () . 'smarty/' . SmartyZip::$entry_dir; //[设置项]Smarty程序文件缓存位置
SmartyZip::$template_dir = dirname ( realpath ( __FILE__ ) ); //[设置项]Smarty模板文件 所在位置 
SmartyZip::$compile_dir = sys_get_temp_dir () . 'smarty/template_c/' . md5 ( SmartyZip::$template_dir ); //[设置项]Smarty编译文件缓存位置


// 注册协议
if (! in_array ( 'SmartyZip', stream_get_wrappers () )) {
 stream_wrapper_register ( 'SmartyZip', 'SmartyZip' );
}
// 定义常量
if (! defined ( 'SMARTY_DIR' )) {
 define ( 'SMARTY_DIR', 'SmartyZip://' );
}
// 包含程序
require_once (SMARTY_DIR . 'Smarty.class.php');
// $smarty = SmartyZip::init(new Smarty); // [选择项]引用即定义$smarty
// return SmartyZip::init(new Smarty); // [选择项]引用即返回$smarty,注意只可引用一次。


/**
 * SmartyZip类定义
 */
class SmartyZip {
 
 /**
  * Smarty变量
  */
 public static $zip_url;
 public static $zip_file;
 public static $entry_dir;
 public static $extract_dir;
 public static $template_dir;
 public static $compile_dir;
 
 /**
  * Stream变量
  */
 private $handle;
 public $context;
 
 /**
  * Smarty函数组
  */
 
 /**
  * init
  * @param Smarty &$smarty
  * @return Smarty
  */
 public static function init(&$smarty) {
  $smarty->template_dir = self::$template_dir;
  if (! is_dir ( self::$compile_dir )) {
   if (mkdir ( self::$compile_dir, 0777, true ) === false) {
    header ( 'Content-type: text/html;charset=utf-8' );
    die ( '请创建目录 ' . self::$compile_dir );
   }
  }
  $smarty->compile_dir = self::$compile_dir;
  return $smarty;
 }
 
 /**
  * Stream函数组
  */
 
 /**
  * __construct
  */
 public function __construct() {
 }
 
 /**
  * stream_cast
  * @param int $cast_as
  * @return resource
  */
 public function stream_cast($cast_as) {
  return false;
 }
 
 /**
  * stream_close
  */
 public function stream_close() {
  fclose ( $this->handle );
 }
 
 /**
  * stream_eof
  * @return bool
  */
 public function stream_eof() {
  return feof ( $this->handle );
 }
 
 /**
  * stream_flush
  * @return bool
  */
 public function stream_flush() {
  return fflush ( $this->handle );
 }
 
 /**
  * stream_lock
  * @param mode $options
  * @return bool
  */
 public function stream_lock($options) {
  return flock ( $this->handle, $options );
 }
 
 /**
  * stream_open
  * @param string $path
  * @param string $mode
  * @param int $options
  * @param string &$opend_path
  * @return bool
  */
 public function stream_open($path, $mode, $options, &$opend_path) {
  // 验证文件地址
  if (! preg_match ( '/^.*?://(.*)$/', $path, $matches )) {
   return false;
  }
  $tmp_file = self::$extract_dir . DIRECTORY_SEPARATOR . $matches [1];
  $entry_file = self::$entry_dir . '/' . str_replace ( '\', '/', $matches [1] );
  $zip_file = self::$zip_file;
  // 验证程序文件
  if (! file_exists ( $tmp_file ) || file_exists ( $zip_file ) && filectime ( $tmp_file ) < filectime ( $zip_file )) {
   // 下载文件
   if (! file_exists ( $zip_file )) {
    // 目录处理
    if (! is_dir ( dirname ( self::$zip_file ) )) {
     if (mkdir ( dirname ( self::$zip_file ), 0777, true ) === false) {
      header ( 'Content-type: text/html;charset=utf-8' );
      die ( '请创建目录 ' . $zip_dir );
     }
    }
    // 下载文件
    if (! file_exists ( self::$zip_file )) {
     $break = true;
     do {
      $url_arr = parse_url ( self::$zip_url );
      $fp = fsockopen ( $url_arr ['host'], isset ( $url_arr ['port'] ) ? ( int ) $url_arr ['port'] : 80, $errno, $errstr, 10 );
      if ($fp === false) {
       break;
      }
      $out = "GET " . $url_arr ['path'] . " HTTP/1.0rnHost: " . $url_arr ['host'] . " rnConnection: closernrn";
      fputs ( $fp, $out );
      if (feof ( $fp )) {
       break;
      }
      $buffer = fgets ( $fp, 1024 );
      if (! preg_match ( '/^HTTP/1.d 200 /i', $buffer )) {
       break;
      }
      $content_length = false;
      $content_start = false;
      while ( ! feof ( $fp ) ) {
       $buffer = fgets ( $fp, 1024 );
       if ($buffer === "rn") {
        $content_start = true;
        break;
       }
       if (preg_match ( '/^Content-Length:s*(d+)/i', $buffer, $matches )) {
        $content_length = ( int ) $matches [1];
       }
      }
      if ($content_length === false || $content_start === false) {
       break;
      }
      $content = stream_get_contents ( $fp );
      if ($content === false) {
       break;
      }
      $result = file_put_contents ( self::$zip_file, $content );
      unset ( $content );
      if ($result === false) {
       break;
      }
      fclose ( $fp );
     } while ( $break = false );
     if ($break) {
      header ( 'Content-type: text/html;charset=utf-8' );
      die ( '请下载文件 <a href="' . self::$zip_url . '">' . self::$zip_url . '</a > 保存为 ' . self::$zip_file );
     }
    }
   }
   // 创建目录
   $tmp_dir = dirname ( $tmp_file );
   if (! is_dir ( $tmp_dir )) {
    if (mkdir ( $tmp_dir, 0777, true ) === false) {
     header ( 'Content-type: text/html;charset=utf-8' );
     die ( '请创建目录 ' . $tmp_dir );
    }
   }
   // 打开压缩文件
   $zip = zip_open ( $zip_file );
   if (! is_resource ( $zip )) {
    return false;
   }
   // 寻找解压文件
   do {
    $entry = zip_read ( $zip );
    if (! is_resource ( $entry )) {
     return false;
    }
    if (zip_entry_name ( $entry ) == $entry_file) {
     break;
    }
   } while ( true );
   // 转存压缩文件
   zip_entry_open ( $zip, $entry );
   file_put_contents ( $tmp_file, zip_entry_read ( $entry, zip_entry_filesize ( $entry ) ) );
   zip_entry_close ( $entry );
   zip_close ( $zip );
  }
  // 打开文件
  $this->handle = fopen ( $tmp_file, $mode );
  if (! is_resource ( $this->handle )) {
   return false;
  }
  return true;
 }
 
 /**
  * stream_read
  * @param int $count
  * @return string
  */
 public function stream_read($count) {
  return fread ( $this->handle, $count );
 }
 
 /**
  * stream_seek
  * @param int $offset
  * @param int $whence=SEEK_SET
  * @return bool
  */
 public function stream_seek($offset, $whence = SEEK_SET) {
  return fseek ( $this->handle, $offset, $whence );
 }
 
 /**
  * stream_set_option
  * @param int $option
  * @param int $arg1
  * @param int $arg2
  * @return bool
  */
 public function stream_set_option($option, $arg1, $arg2) {
  return false;
 }
 
 /**
  * stream_stat
  * @return array
  */
 public function stream_stat() {
  return fstat ( $this->handle );
 }
 
 /**
  * stream_tell
  * @return int
  */
 public function stream_tell() {
  return ftell ( $this->handle );
 }
 
 /**
  * stream_write
  * @param string $data
  * @return int
  */
 public function stream_write($data) {
  return fwrite ( $this->handle, $data );
 }
 
 /**
  * url_stat
  * @param string $path
  * @param int $flag
  * @return array
  */
 public function url_stat($path, $flag) {
  if (! preg_match ( '/^.*?://(.*)$/', $path, $matches )) {
   return false;
  }
  $tmp_file = self::$extract_dir . DIRECTORY_SEPARATOR . $matches [1];
  if (file_exists ( $tmp_file )) {
   if ($flag & STREAM_URL_STAT_LINK) {
    return lstat ( $tmp_file );
   } else {
    return stat ( $tmp_file );
   }
  }
  if ($flag & STREAM_URL_STAT_QUIET) {
   $file_stat = lstat ( __FILE__ );
   $mode = $file_stat ['mode'];
   // smarty plugins adjust
   if (strpos ( $matches [1], 'plugins' . DIRECTORY_SEPARATOR . 'compiler.' ) !== false) {
    if (strpos ( $matches [1], 'plugins' . DIRECTORY_SEPARATOR . 'compiler.assign.php' ) === false) {
     $mode = 0;
    }
   } elseif (strpos ( $matches [1], 'plugins' . DIRECTORY_SEPARATOR . 'block.' ) !== false) {
    if (strpos ( $matches [1], 'plugins' . DIRECTORY_SEPARATOR . 'block.textformat.php' ) === false) {
     $mode = 0;
    }
   }
   $arr = array ('dev' => 0, 'ino' => 0, 'mode' => $mode, 'nlink' => 0, 'uid' => 0, 'gid' => 0, 'rdev' => 0, 'size' => 0, 'atime' => 0, 'mtime' => 0, 'ctime' => 0, 'blksize' => 0, 'blocks' => 0 );
   return array_merge ( array_values ( $arr ), $arr );
  }
  return false;
 }
}
?>

使用Smarty很简单:

1. 包含SmartyZip文件。
2. 使用SmartyZip::init(new Smarty)自动为smarty对象设置默认路径。

样例代码:view sourceprint?1 <?php 

2 include_once 'SmartyZip.php'; 

3 $smarty = SmartyZip::init(new Smarty); 

4 $smarty->assign ( 'name', 'SmartyZip' ); 

5 $smarty->display ( 'test.<SPAN class=t_tag onclick=tagshow(event) href="tag.php?name=html">html</SPAN>' ); 

6 ?>

1.远程图片本地化要求空间相应目录可写外还要求php教程的allow_url_fopen 选项设置为On


这些是远程图片本地化的必要条件,但并不是说有了这些就一定可以远程图片本地化了,这个与对方的服务器和网络环境整体情况都有很大的关系(对php来说是不可控的),

 

2.DEDECMS里面保存远程图片的函数


/dede/inc/inc_archives_functions.php   主要是获得图片保存的

/include/pub_collection_functions.php  不能直接保存下来的,或者有简单防盗链的。造假Referer。

 

$sourcecode=getsourcecode("http://www.sogou.com/web?query=".$q);
//echo ":".$sourcecode;
if($sourcecode){
$sourcecode=iconv('gb2312','utf-8',$sourcecode);
 preg_match('/搜狗评级:(.*?)&nbsp;/', $sourcecode, $cmatche);
 if($cmatche[1]){
  echo '<script type="text/javascript教程">parent.document.getElementById("sogourank").innerHTML = "'.$cmatche[1].'";</script>'." "; 
 }else{
  echo '<script type="text/javascript">parent.document.getElementById("sogourank").innerHTML = "0/100";</script>'." "; 
 }
}

[!--infotagslink--]

相关文章

  • php中json_decode()和json_encode()用法与中文不显示解决办法

    本文章介绍了关于php中json_decode()和json_encode()用法与中文不显示解决办法,有需要的朋友可以参考一下下。 php中json_decode()和json_encode() 1.json_decode(...2016-11-25
  • php 中file_get_contents超时问题的解决方法

    file_get_contents超时我知道最多的原因就是你机器访问远程机器过慢,导致php脚本超时了,但也有其它很多原因,下面我来总结file_get_contents超时问题的解决方法总结。...2016-11-25
  • HTTP 408错误是什么 HTTP 408错误解决方法

    相信很多站长都遇到过这样一个问题,访问页面时出现408错误,下面一聚教程网将为大家介绍408错误出现的原因以及408错误的解决办法。 HTTP 408错误出现原因: HTT...2017-01-22
  • 源码分析系列之json_encode()如何转化一个对象

    这篇文章主要介绍了源码分析系列之json_encode()如何转化一个对象,对json_encode()感兴趣的同学,可以参考下...2021-04-22
  • PHP 验证码不显示只有一个小红叉的解决方法

    最近想自学PHP ,做了个验证码,但不知道怎么搞的,总出现一个如下图的小红叉,但验证码就是显示不出来,原因如下 未修改之前,出现如下错误; (1)修改步骤如下,原因如下,原因是apache权限没开, (2)点击打开php.int., 搜索extension=ph...2013-10-04
  • 安卓手机wifi打不开修复教程,安卓手机wifi打不开解决方法

    手机wifi打不开?让小编来告诉你如何解决。还不知道的朋友快来看看。 手机wifi是现在生活中最常用的手机功能,但是遇到手机wifi打不开的情况该怎么办呢?如果手机wifi...2016-12-21
  • 连接MySql速度慢的解决方法(skip-name-resolve)

    最近在Linux服务器上安装MySql5后,本地使用客户端连MySql速度超慢,本地程序连接也超慢。 解决方法:在配置文件my.cnf的[mysqld]下加入skip-name-resolve。原因是默认安装的MySql开启了DNS的反向解析。如果禁用的话就不能...2015-10-21
  • 总结android studio注意事项及打不开等问题解决方法

    经过一段时间的使用,总结了android studio打不开等问题的6种解决方法及android studio注意事项,希望对大家有所帮助。 1 首次运行,建立好项目需要下载一些东西,如果...2016-09-20
  • PHP json_encode() 函数详解及中文乱码问题

    在 php 中使用 json_encode() 内置函数(php > 5.2)可以使用得 php 中数据可以与其它语言很好的传递并且使用它。这个函数的功能是将数值转换成json数据存储格式。<&#63;php$arr = array ( 'Name'=>'希亚', 'Age'...2015-11-08
  • MySQL ERROR 2013 (HY000)错误解决方法

    当通过 TCP/IP 连接 MySQL 远程主机时,出现 ERROR 2013 (HY000): Lost connection to MySQL server at 'reading initial communication packet', system error: 104 。如果是在linux shell命令行中直接打 mysql 命令,...2015-03-15
  • IE6-IE9中tbody的innerHTML不能赋值的解决方法

    IE6-IE9中tbody的innerHTML不能赋值,重现代码如下 复制代码 代码如下: <!DOCTYPE html> <html> <head> <meta charset="utf-8"/> <title>IE6-IE9中tbody的innerHTML不能复制bug</title> </head> <body style="height:3...2014-06-07
  • Mysql修改datadir导致无法启动问题解决方法

    centos6.2,停止mysqld然后修改/etc/my.cnf datadir的位置,启动mysqld提示FAILED,查看日志 复制代码 代码如下: 120609 11:31:31 mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended 120609 11:35:12 my...2015-03-15
  • 小米解锁验证失败怎么办 小米解锁工具登录失败解决方法

    小米手机如果想要刷机就必须要先解锁验证才可以,那么,如果遇到小米解锁验证失败以及小米解锁工具登录失败的现象怎么办呢?对此,本文就为大家进行解答,有需要的朋友来看看。...2016-12-21
  • Photoshop提示“此产品的许可证已过期"及“无法开始您的Adobe Photoshop CS5.1 订阅”解决方法

    首先不要鄙视我用Photoshop盗版,实在是贵。现在我们来看看如果你的Photoshop提示“此产品的许可证已过期",还有“无法开始您的Adobe Photoshop CS5.1 订阅”如何解决吧...2016-09-14
  • photoshop字体显示乱码解决方法

    今天小编在这里就来给各位photoshop的这一款软件的使用者们来详细的说一下软件的字体出现了乱码这一问题的解决方法,那么各位有出现这个问题的,下面就来跟着小编一起看...2016-09-14
  • Ubuntu15下mysql5.6.25不支持中文的解决办法

    apt-get install 安装的,不是源码包安装的mysql1 修改mysql的配置文件/etc/mysql/conf.d/mysql.cnf在[mysql]的下方加入如下语句:(注:这个文件下没有配置,只有【mysql】)no-auto-rehash default-character-set=utf8/etc/...2015-10-21
  • 51安卓模拟器启动失败解决方法

    有部分小伙伴表示自己遇到了51模拟器程序不能打开的情况,那么51模拟器打不开怎么回事?下面我就来为大家分享一下解决的方法,有需要的小伙伴就来看一看吧。 &#8195;&...2017-07-06
  • CentOS下php使用127.0.0.1不能连接mysql的解决方法

    php代码很简单:复制代码 代码如下: $server="127.0.0.1"; println("Begin"); $link = mysql_connect($server,"mysql","mysql"); if (!$link) { die('Could not connect: ' . mysql_error().mysql_errno()); } lin...2015-03-15
  • PHP is_subclass_of函数的一个BUG和解决方法

    is_subclass_of的作用:复制代码 代码如下:bool is_subclass_of ( object object, string class_name )如果对象 object 所属类是类 class_name 的子类,则返回 TRUE,否则返回 FALSE。注: 自 PHP 5.0.3 起也可以用一个字符...2014-06-07
  • mysql too many open connections问题解决方法

    曾经以为在my.cnf写入max_connections = 2000就可以改变mysql的最大并发量,今天查到一个命令,发现服务器的mysql最大连接数为151.控制台,连接上mysql复制代码 代码如下:show variables;这条命令可以看到所有基础配置如果...2014-05-31