浏览模式: 普通 | 列表

解决php mb_substr函数中文乱码问题

[ 2022-08-20 14:51:08 | 作者: admin ]
PHP用substr截取字符串出现中文乱码问题用 mb_substr

实例:
mb_substr('截取中文乱码问题测试',0,5, 'utf-8');
$rest = substr ("中国人", 1, -1); // returns "fdsafsda" 就是乱码了


解决办法主要有两种:

一、使用mbstring扩展库的mb_substr()截取就不会出现乱码了。

可以用mb_substr()/mb_strcut()这个函数,mb_substr()/mb_strcut()的用法与substr()相似,只是在mb_substr()/mb_strcut最后要加入多一个参数,以设定字符串的编码,

但是一般的服务器都没打开php_mbstring.dll,需要在php.ini在把php_mbstring.dll打开。
echo mb_substr("php中文字符encode",0,4,"utf-8");
...

阅读全文…
p.s.其他centos服务器还没有遇到这个问题,或者说尚不清楚是否存在这个问题

原始字符串
<a href="mailto:666666@qq.com ">666666@qq.com</a>

正常json_encode()后
<a href=\"mailto:666666@qq.com \">666666@qq.com<\/a>

目前遇到的问题是 json_encode 后自动加了 ?PHPSESSID=AAAAAAAAAAA ,造成json字符串无法正常解析了
<a href=\?PHPSESSID=AAAAAAAAAAA"mailto:666666@qq.com \">666666@qq.com<\/a>


解决办法:
在php.ini中配置为
session.use_only_cookies = 1;
今天在做本地环境开发阿里云短信验证时报错:cURL error 60: SSL certificate problem: unable to get local issuer certificate (see https://curl.haxx.se/libcurl/c/libcurl-errors.html)



Windows版本
1.到 https://curl.haxx.se/ca/cacert.pem 下载证书文件 cacert.pem,将其保存到 PHP 安装路径下。

2.编辑 php.ini 文件,删除 curl.cainfo 配置项前的分号注释符(;),值设置为保存的证书文件 cacert.pem 的绝对路径。

3.重启依赖 PHP 的服务。
attachments/202204/27_170205_20210707171649391.png

...

阅读全文…
PHP 5.4.3 环境中测试了一个在 PHP 5.2 环境下运行正常的程序,却发现本应正常提交一个中文字符串到数据库的代码却提交了一个空字符串,经过排查,该字符串在经 htmlspecialchars 函数转义之前正常,而在转义之后却变成了空字符串。调用例子如下:
$str = '中文字符串';
$str_converted = htmlspecialchars($str);
echo $str_converted;

遂查看PHP手册,获知 htmlspecialchars 函数原型如下:
string htmlspecialchars ( string $string [, int $flags = ENT_COMPAT | ENT_HTML401 [, string $encoding = 'UTF-8' [, bool $double_encode = true ]]] )
...

阅读全文…
函数名释义介绍htmlspecialchars将与、单双引号、大于和小于号化成HTML格式&转成&amp;"转成&quot;'转成&#039;<转成&lt;>转成&gt;htmlentities()...

阅读全文…
警告:生产环境永远都不要显示任何错误信息!
显示错误(display_errors)和错误报告(error_reporting)是两回事。PHP 脚本发生错误时,可以根据设置选择是否报告这个错误(记录到错误日志中),如果设置中开启了 display_errors,则同时把错误信息打印到屏幕上。


项目中常用的设置
switch (ENVIRONMENT)
{
         // 对于开发环境,报告所有错误,同时显示到屏幕上
         case 'development':
                error_reporting(-1);
                ini_set('display_errors', 1);
         break;

         // 对于测试和生产环境,不显示错误,5.3 以上的版本,不报告通知、废弃方法、严格这几类错误
...

阅读全文…
由于用GD画图, 需要把一段文字在一个框内居中, 但是文字的宽度如果用strlen($str) * $font_size来计算的话, 由于文字不是等宽高的, 所以会导致偏离, 最后选用的GD库的imagettfbbox()函数, 其原型如下

array ImageTTFBBox(int size, int angle, string fontfile, string text);

其中返回一个数组, 有八个元素, 描述了四个角的坐标

0 左下角 X 位置

1 左下角 Y 位置

2 右下角 X 位置

3 右下角 Y 位置

4 右上角 X 位置

5 右上角 Y 位置

6 左上角 X 位置

7 左上角 Y 位置

$pos = imagettfbbox(self::FONT_SIZE , 0, self::FONT_FILE, $name);
...

阅读全文…
p.s. 以前还不知道,phpqrcode自带保存二维码参数。

前期准备:

1.phpqrcode类文件下载,下载地址:https://sourceforge.net/projects/phpqrcode/
2.PHP环境必须开启支持GD2扩展库支持(一般情况下都是开启状态)

方法解读:

下载下来的类文件是一个压缩包,里边包含很多文件和演示程序,我们只需要里边的phpqrcode.php这一个文件就可以生成二维码了。它是一个多个类的集合文件,我们需要用到里边的QRcode类(第2963行)的png()方法(第3090行):
public static function png($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint=false)
...

阅读全文…