encode数据库 PHP中json_encode中文乱码问题
大家好,今天来为大家分享encode数据库的一些知识点,和PHP中json_encode中文乱码问题的问题解析,大家要是都明白,那么可以忽略,如果不太清楚的话可以看看本篇文章,相信很大概率可以解决您的问题,接下来我们就一起来看看吧!
PHP中json_encode中文乱码问题
php中使用 json_encode()内置函数(php> 5.2)可以使用得 php中数据可以与其它语言很好的传递并且使用它。这个函数的功能是将数值转换成json数据存储格式
$arr= array('a'=>1,'b'=>2,'c'=>3,'d'=>4,'e'=>5);
echo json_encode($arr);
//结果
//{"a":1,"b":2,"c":3,"d":4,"e":5}
/*
下面看一款json_encode中文乱码问题
解决方法是用urlencode()函数处理以下,在json_encode之前,把所有数组内所有内容都用urlencode()处理一下,然用json_encode()转换成json字符串,最后再用urldecode()将编码过的中文转回来
*/
function arrayrecursive(&$array,$function,$apply_to_keys_also= false)
{
static$recursive_counter= 0;
if(++$recursive_counter> 1000){
die('possible deep recursion attack');
}
foreach($array as$key=>$value){
if(is_array($value)){
arrayrecursive($array[$key],$function,$apply_to_keys_also);
} else{
$array[$key]=$function($value);
}
if($apply_to_keys_also&& is_string($key)){
$new_key=$function($key);
if($new_key!=$key){
$array[$new_key]=$array[$key];
unset($array[$key]);
}
}
}
$recursive_counter--;
}
/**************************************************************
*
*将数组转换为json字符串(兼容中文)
*@param array$array要转换的数组
*@return string转换得到的json字符串
*@access public
*
*************************************************************/
function json($array){
arrayrecursive($array,'urlencode', true);
$json= json_encode($array);
return urldecode($json);
}
$array= array
(
'name'=>'希亚',
'age'=>20
);
echo json($array);
//应用实例
$servname="localhost";
$sqlservname="root";
$sqlservpws="123456";
$sqlname="lock1";
$db=mysql教程_connect($servname,$sqlservname,$sqlservpws) or die("数据库教程连接失败");
mysql_select_db($sqlname,$db);
$sql="select* from t_operater";
$result=mysql_query($sql);
$rows= mysql_num_rows($result);
while($obj= mysql_fetch_object($result))
{
$arr[]=$obj;
}
echo'({"total":"'.$rows.'","results":'.json_encode($arr).'})';
怎么用encode来查找转录因子下游基因
转录因子一半都结合在被调控基因的promoter区域,可以做一个chip-seq实验,然后在基因组数据库中定位这些与该转录因子结合的DNA区域.
那么这些区域的下游附近的基因就很可能是受该转录因子调控的基因。
然后在针对这些疑似基因做转录因子KO之后的该基因mRNA水平检测(realtimePCR)确定是否受其调控。
.net中如何使用HtmlEncode
System.Web.HttpServerUtility.HtmlEncode
需要引用System.Web。如果你的项目是Web项目的话,默认已经引用了他。
使用方法:
private void Button1_Click(object sender, System.EventArgs e)
{
Label1.Text= Server.HtmlEncode(TextBox1.Text);
Label2.Text=
Server.HtmlEncode(dsCustomers1.Customers[0].CompanyName);
}
如果你需要在非Web上应用的话,需要自行构造一个System.Web.HttpServerUtility的实例。
更多的:
大多数脚本利用发生在用户可以将可执行代码(或脚本)插入您的应用程序时。默认情况下,ASP.NET提供请求验证。只要窗体发送包含任何 HTML,该验证都会引发错误。
您可以使用下列方法防止脚本利用:
对窗体变量、查询字符串变量和 Cookie值执行参数验证。该验证应包括两种类型的验证:可以将变量转换为所需类型(如转换为整数、日期时间等)的验证,以及所需范围或格式的验证。例如,应该使用 Int32..::.TryParse方法来检查应为整数的窗体发送变量,以验证该变量是否确实为整数。而且,还应该检查得到的整数,以验证该值是否在所需值范围之内。
将值写回响应时,向字符串输出应用 HTML编码。这有助于确保用户提供的所有字符串输入将以静态文本形式呈现在浏览器中,而不是呈现为可执行的脚本代码或已解释的 HTML元素。
HTML编码使用 HTML保留字符转换 HTML元素,以便显示它们而不是执行它们。
向字符串应用 HTML编码
显示字符串之前,调用 HtmlEncode方法。HTML元素会转换为浏览器将显示(而不解释为 HTML)的字符串表示形式。
下面的示例说明 HTML编码。在第一个实例中,在显示用户输入之前对其进行编码。在第二个实例中,在显示数据库中的数据之前对其进行编码。
注意:
只有通过添加@ Page属性 ValidateRequest="false"在页中禁用请求验证时,此示例才起作用。建议不要在成品应用程序中禁用请求验证,因此,请确保在查看本示例之后重新启用请求验证。
Visual Basic复制代码
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e _
As System.EventArgs) Handles Button1.Click
Label1.Text= Server.HtmlEncode(TextBox1.Text)
Label2.Text= _
Server.HtmlEncode(dsCustomers.Customers(0).CompanyName)
End Sub
C#复制代码
private void Button1_Click(object sender, System.EventArgs e)
{
Label1.Text= Server.HtmlEncode(TextBox1.Text);
Label2.Text=
Server.HtmlEncode(dsCustomers1.Customers[0].CompanyName);
}
如何实现Tomcat连接池数据库密码加密
问题解决思路:
将配置文件用户相关的信息(例如:密码)进行加密使其以密文形式存在,进行初始化连接池的时候进行解密操作,达到成功创建连接池的目的。Tomcat默认使用DBCP连接池(基于common-pool的一种连接池实现),可在http://jakarta.apache.org/commons/dbcp/下载commons-dbcp源码包commons-dbcp-1.4-src.zip,对org.apache.commons.dbcp.BasicDataSourceFactory类修改,把数据库密码字段(加密后的密文)用解密程序解密,获得解密后的明文即可。
具体实现:
1.修改org.apache.commons.dbcp.BasicDataSourceFactory类文件
找到数据源密码设置部分
value= properties.getProperty(PROP_PASSWORD);
if(value!= null){
dataSource.setPassword(value);
}
修改为:
value= properties.getProperty(PROP_PASSWORD);
if(value!= null){
dataSource.setPassword(Encode.decode(value));
}
将配置文件中的“密码”(加密后的结果)取出,调用加解密类中的解密方法Encode.decode(value)进行解密。
2.加密类Encode.java,本例中使用加密解密模块比较简单只是用来说明问题,密文为明文的十六进制串。
public class Encode{
//编码-普通字符串转为十六进制字符串
public static String encode(String password){
String result=“”;
byte[] psd= password.getBytes();
for(int i=0;i<psd.length;i++){
result+= Integer.toHexString(psd[i]&0xff);
}
return result;
}
//解码–十六进制字符串转为普通字符串
public static String decode(String password){
String result=“”;
password= password.toUpperCase();
int length= password.length()/ 2;
char[] hexChars= password.toCharArray();
byte[] d= new byte[length];
for(int i= 0; i< length; i++){
int pos= i* 2;
d[i]=(byte)(charToByte(hexChars[pos])<< 4| charToByte(hexChars[pos+ 1]));
}
result= new String(d);
return result;
}
//字符转字节
public static byte charToByte(char c){
return(byte)“0123456789ABCDEF”.indexOf(c);
}
}
3.数据库连接池文件,红色字体为数据源配置中密码设置,此时已经改为密文形式。
<?xml version=’1.0′ encoding=’utf-8′?>
<Context docBase=”reportmis” path=”/reportmis” privileged=”true” workDir=”work\Catalina\localhost\reportmis”>
<Resource auth=”Container” name=”mis2datasource” type=”javax.sql.DataSource”/>
<ResourceParams name=”mis2datasource”>
<parameter>
<name>password</name>
<value>696e65743231</value>
</parameter>
<parameter>
<name>url</name>
<value>jdbc:oracle:thin:@127.0.0.1:1521:orcl</value>
</parameter>
<parameter>
<name>driverClassName</name>
<value>oracle.jdbc.driver.OracleDriver</value>
</parameter>
<parameter>
<name>username</name>
<value>wanfang</value>
</parameter>
</ResourceParams>
</Context>
4.将修改后的BasicDataSourceFactory.java和新添加的Encode.java编译后的class类文件重新打包进commons-dbcp-1.4.jar,将该包拷贝进tomcat下的common/lib目录中,重启tomcat。此时tomcat下部署的应用在连接数据源的时候都可以在不暴露密码明文的情况下进行连接。
encode数据库的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于PHP中json_encode中文乱码问题、encode数据库的信息别忘了在本站进行查找哦。