php使用escapeshellarg时中文被过滤的解决方法
本文分析了php使用escapeshellarg时中文被过滤的解决方法。分享给大家供大家参考。具体如下:
一、问题:
同样的代码,发现通过 localhost/index.php 访问,和在 shell 中通过 php ./index.php 运行結果却不一样。
在程序中需要通过 shell_exec 来执行一个 linux 程序,而它的输入来自 echo ,即:
shell_exec('echo '.escapeshellarg($str).' | some_cmd 2>&1');
二、解决方法:
而这个 $str 中可能包含中文的。一开始我还以为是 some_cmd 自己把中文滤掉,后来发现是 escapeshellarg 的问题。
貌似出现这个问题的不多,经过查询与测试发现原来是 shell 和 apache php-cgi 的运行环境不同引起的。
在 php 中加入:
setlocale(LC_CTYPE, "UTF8", "en_US.UTF-8");
就正常了!
希望本文所述对大家php程序设计有所帮助。
相关文章
Laravel5.3+框架定义API路径取消CSRF保护方法详解
这篇文章主要介绍了Laravel框架定义API路径取消CSRF保护,需要的朋友可以参考下2020-04-04php模仿asp Application对象在线人数统计实现方法
这篇文章主要介绍了php模仿asp Application对象在线人数统计实现方法,通过一个比较简单的自定义函数实现这一功能,具有一定参考借鉴价值,需要的朋友可以参考下2015-01-01Linux下创建nginx脚本-start、stop、reload…
这篇文章主要介绍了Linux下创建nginx脚本-start、stop、reload的方法,需要的朋友可以参考下2014-08-08php连接mysql之mysql_connect()与mysqli_connect()的区别
本扩展自 PHP 5.5.0 起已废弃,并在将来会被移除。应使用 MySQLi 或 PDO_MySQL 扩展来替换之,这里就为大家分享一下mysql_connect()与mysqli_connect()的区别,需要的朋友可以参考下2020-07-07
最新评论