本文章来给各位介绍phpMyAdmin 3.5.8 在 Safari 中空白屏解决方法,因为在其它浏览器中都没有问题,只有在Safari浏览器空白,所以只要解决Safari中空白即可。
在配置文件 config.inc.php 的最后添加了如下一行:
代码如下 |
复制代码 |
$cfg['AllowThirdPartyFraming'] = true;
|
在 safari 中打开,一切正常了。
注意:在3.5.2版中就已经修正了这个 bug 的但在我是3.5.8还是有问题,所大家以自己为准吧。
php程序员可能会经常碰到PHP Parse Error: syntax error, unexpected $end 错误,下面我来给各位朋友详细总结导致PHP Parse Error: syntax error, unexpected $end 错误原因分析与解决办法吧。
错误如下:
Parse error: syntax error, unexpected $end in D:xampphtdocsguestBookguestBook.php on line 330
网上查了很多朋友说是因为php.ini中设置short_open_tag = On导致了错误,其它这个个觉得与这个关系不大,主要是出现在你编程基本处理上的问题
例:
代码如下 |
复制代码 |
$a =1;
if($a)
{
echo $a;
}
else
{
|
运行之后会出现
Parse error: syntax error, unexpected $end in E:wwwtest.php on line 126 错误了,
从上面代码看我们是if{}else{}未结束导致了,我们只要把
代码如下 |
复制代码 |
$a =1;
if($a)
{
echo $a;
}
else
{
}
|
加上}即可了。
出现中文截取乱码的问题一般是中文文合混时比较多,如果你截取英文不会有问题,中文就会有,主要原因是:字符串编码为UTF-8的,一个中文字符占三个字节而字符串编码为GB2312的,一个中文字符占两个字节了。下面我来先来看实例。
字符串编码为GB2312的,一个中文字符占两个字节:
代码如下 |
复制代码 |
public static function chinesesubstr($str, $start, $len) { // $str指字符串,$start指字符串的起始位置,$len指字符串长度
$strlen = $start + $len; // 用$strlen存储字符串的总长度,即从字符串的起始位置到字符串的总长度
for($i = $start; $i < $strlen;) {
if (ord ( substr ( $str, $i, 1 ) ) > 0xa0) { // 如果字符串中首个字节的ASCII序数值大于0xa0,则表示汉字
$tmpstr .= substr ( $str, $i, 2 ); // 每次取出两位字符赋给变量$tmpstr,即等于一个汉字
$i=$i+2; // 变量自加2
} else{
$tmpstr .= substr ( $str, $i, 1 ); // 如果不是汉字,则每次取出一位字符赋给变量$tmpstr
$i++;
}
}
return $tmpstr; // 返回字符串
}
|
字符串编码为UTF-8的,一个中文字符占三个字节:
代码如下 |
复制代码 |
public static function chinesesubstr($str, $start, $len) { // $str指字符串,$start指字符串的起始位置,$len指字符串长度
$strlen = $start + $len; // 用$strlen存储字符串的总长度,即从字符串的起始位置到字符串的总长度
for($i = $start; $i < $strlen;) {
if (ord ( substr ( $str, $i, 1 ) ) > 0xa0) { // 如果字符串中首个字节的ASCII序数值大于0xa0,则表示汉字
$tmpstr .= substr ( $str, $i, 3 ); // 每次取出三位字符赋给变量$tmpstr,即等于一个汉字
$i=$i+3; // 变量自加3
} else{
$tmpstr .= substr ( $str, $i, 1 ); // 如果不是汉字,则每次取出一位字符赋给变量$tmpstr
$i++;
}
}
return $tmpstr; // 返回字符串
}
|
上面虽然解决了这个问题,但是要注意编码问题,相对来说比较麻烦,下面写了一个不管什么编码都没问题的解决办法。
代码如下 |
复制代码 |
/**
* Utf-8、gb2312都支持的汉字截取函数
* cut_str(字符串, 截取长度, 开始长度, 编码);
* 编码默认为 utf-8
* 开始长度默认为 0
*/
function cut_str($string, $sublen, $start = 0, $code = 'UTF-8')
{
if($code == 'UTF-8')
{
$pa = "/[x01-x7f]|[xc2-xdf][x80-xbf]|xe0[xa0-xbf][x80-xbf]|[xe1-xef][x80-xbf][x80-xbf]|xf0[x90-xbf][x80-xbf][x80-xbf]|[xf1-xf7][x80-xbf][x80-xbf][x80-xbf]/";
preg_match_all($pa, $string, $t_string);
if(count($t_string[0]) - $start > $sublen) return join('', array_slice($t_string[0], $start, $sublen))."…";
return join('', array_slice($t_string[0], $start, $sublen));
}
else
{
$start = $start*2;
$sublen = $sublen*2;
$strlen = strlen($string);
$tmpstr = '';
for($i=0; $i< $strlen; $i++)
{
if($i>=$start && $i< ($start+$sublen))
{
if(ord(substr($string, $i, 1))>129)
{
$tmpstr.= substr($string, $i, 2);
}
else
{
$tmpstr.= substr($string, $i, 1);
}
}
if(ord(substr($string, $i, 1))>129) $i++;
}
if(strlen($tmpstr)< $strlen ) $tmpstr.= "…";
return $tmpstr;
}
}
|
很多朋友在使用setcookie设置值为空或NULL时系统会自动把cookie给删除掉,下面我来给大家分析cookie值为null或空字符串删除cookie原因吧,有需要学习的朋友可参考。
官方文档中也是这样写的:
#2 setcookie() delete example
代码如下 |
复制代码 |
<?php
// set the expiration date to one hour ago
setcookie ("TestCookie", "", time() - 3600);
setcookie ("TestCookie", "", time() - 3600, "/~rasmus/", "example.com", 1);
?>
|
今天遇到一件奇怪的事, 在setcookie的时候,传了一个空字符串给$value,结果竟然是此cookie被删除了…
代码如下 |
复制代码 |
$name = "post_url";
$value = "";
setcookie($name, $value, time()+60*60*3, "/" );
|
去翻php 5.4.13 的源码结果得知
参数中的value在C语言中的类型是char * , 还有一个 value_len标明了它的长度。
如果value_len为0的话,就写了下面的cookie:
值为”deleted”, 过期时间为 Thu, 01-Jan-1970 08:00:01 CST 或者说是 Thu, 01-Jan-1970 00:00:01 GMT
看来setcookie($name, “”) 确实可以删除这个cookie了…
同理,在php中,strval(NULL) === “” , 所以 setcookie($name, NULL) 也就相当于 setcookie($name, “”),同样可以删除此cookie.
在通过IE的后退按钮或者网页中的history.go(-1)时,我们看到的将是缓存页,但使用了session_start后,这个函数会强制当前页面不被缓存,导致出现“警告: 网页已经过期”。
解决方法一:
在session_start之后加一句
代码如下 |
复制代码 |
header("Cache-control: private"); |
注意在此之前程序不能有任何输出。
解决方法二:
在session_start前加上
代码如下 |
复制代码 |
session_cache_limiter('private'); |
//不清空表单,只在session生效期间
代码如下 |
复制代码 |
session_cache_limiter还有另两个参数的含义:
session_cache_limiter('nocache');// 清空表单
session_cache_limiter('public'); //不清空表单,如同没有使用session |
解决方法三
更改配置文件php.ini。将该文件中
代码如下 |
复制代码 |
session.cache_limiter = nocache |
改为
代码如下 |
复制代码 |
session.cache_limiter = 或者session.cache_limiter = none |
,然后重新启动apache。
标签:[!--infotagslink--]