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程序设计有所帮助。
相关推荐
-
php 过滤英文标点符号及过滤中文标点符号代码
php 过滤英文标点符号 过滤中文标点符号 代码 复制代码 代码如下: function filter_mark($text){ if(trim($text)=='')return ''; $text=preg_replace("/[[:punct:]\s]/",' ',$text); $text=urlencode($text); $text=preg_replace("/(%7E|%60|%21|%40|%23|%24|%25|%5E|%26|%27|%2A|%28|%2
-
PHP屏蔽过滤指定关键字的方法
本文实例讲述了PHP屏蔽过滤指定关键字的方法.分享给大家供大家参考.具体分析如下: 实现思路: 一.把关键字专门写在一个文本文件里,每行一个,数量不限,有多少写多少. 二.PHP读取关键字文本,存入一个数组 三.遍历关键字数组,挨个用strpos函数去看看内容有没有关键字,如果有,返回true,没有则返回false PHP代码如下: 复制代码 代码如下: /* PHP中用strpos函数过滤关键字 */ // 关键字过滤函数 function keyWordCheck($content){ //
-
php正则过滤html标签、空格、换行符的代码(附说明)
复制代码 代码如下: $str=preg_replace("/\s+/", " ", $str); //过滤多余回车 $str=preg_replace("/<[ ]+/si","<",$str); //过滤<__("<"号后面带空格) $str=preg_replace("/<\!--.*?-->/si","",$str); //
-
php完全过滤HTML,JS,CSS等标签
记得以前写过一篇文章 php有效的过滤html标签,js代码,css样式标签: 复制代码 代码如下: <?php $str = preg_replace( "@<script(.*?)</script>@is", "", $str ); $str = preg_replace( "@<iframe(.*?)</iframe>@is", "", $str ); $str = preg_r
-
PHP字符过滤函数去除字符串最后一个逗号(rtrim)
首先分别解释下, trim过滤字符串两端,rtrim过滤字符串尾部,=chop()ltrim过滤字符串首部. 过滤字符串中键的咚咚就只能用str_replace咯.举个例子说明下, PHP代码 复制代码 代码如下: $str = '123,333,234,'; echo rtrim($str, ','); rtrim实例代码2 复制代码 代码如下: <?php$text = "\t\tThese are a few words :) ... ";$trimmed = rtrim
-
php 安全过滤函数代码
复制代码 代码如下: //安全过滤输入[jb] function check_str($string, $isurl = false) { $string = preg_replace('/[\\x00-\\x08\\x0B\\x0C\\x0E-\\x1F]/','',$string); $string = str_replace(array("\0","%00","\r"),'',$string); empty($isurl) &&am
-
PHP开发不能违背的安全规则 过滤用户输入
作为最基本的防范你需要注意你的外部提交,做好第一面安全机制处理防火墙. 规则 1:绝不要信任外部数据或输入 关于Web应用程序安全性,必须认识到的第一件事是不应该信任外部数据.外部数据(outside data) 包括不是由程序员在PHP代码中直接输入的任何数据.在采取措施确保安全之前,来自任何其他来源(比如 GET 变量.表单 POST.数据库.配置文件.会话变量或 cookie)的任何数据都是不可信任的. 例如,下面的数据元素可以被认为是安全的,因为它们是在PHP中设置的. 复制代码 代码如
-
PHP实现过滤掉非汉字字符只保留中文字符
<?php $str = "a 1b 2b<中文>.xxyy字符"; //转换 GB2312 -> UTF-8 $str = mb_convert_encoding($str, 'UTF-8', 'GB2312'); preg_match_all('/[\x{4e00}-\x{9fff}]+/u', $str, $matches); $str = join('', $matches[0]); //转换 UTF-8 -> GB2312 $str = mb_c
-
php实现过滤字符串中的中文和数字实例
本文实例讲述了php实现过滤字符串中的中文和数字.分享给大家供大家参考.具体实现方法如下: function getChinese($string,$encode="GBK") { switch($encode){ case "GBK" :$codelength=2;break; case "GB2312" :$codelength=3;break; case "UTF-8" :$codelength=3;break; cas
-
php过滤HTML标签、属性等正则表达式汇总
$str=preg_replace("/\s+/", " ", $str); //过滤多余回车 $str=preg_replace("/<[ ]+/si","<",$str); //过滤<__("<"号后面带空格) $str=preg_replace("/<\!--.*?-->/si","",$str); //注释 $str=p
-
比较好用的PHP防注入漏洞过滤函数代码
复制代码 代码如下: <?PHP //PHP整站防注入程序,需要在公共文件中require_once本文件 //判断magic_quotes_gpc状态 if (@get_magic_quotes_gpc ()) { $_GET = sec ( $_GET ); $_POST = sec ( $_POST ); $_COOKIE = sec ( $_COOKIE ); $_FILES = sec ( $_FILES ); } $_SERVER = sec ( $_SERVER ); functi
-
几个有用的php字符串过滤,转换函数代码
nl2br();// \n to addslashes(); stripslashes();//对数据库操作时,转义特殊字符 chop();//除去字符串右边空格 trim();//除去字符串中所有空格 ltrim();//除去字符串左边空格 htmlspecialchars();//转换'$','"','<','>'为相应的html实体 htmlentities();//转换所有html标记为相应的html实体 array explode(string separator, str
随机推荐
- 简单三步,搞掂内存泄漏
- 利用mshta调用运行js或vbs的
- Jquery + Ajax调用webService实例代码(asp.net)
- 让McAfee来终结网站被挂马的时代图文教程
- JavaScript无阻塞加载和defer、async详解
- 总结Visual Studio下ASP.NET模板化控件中的数据绑定
- php生成缩略图填充白边(等比缩略图方案)
- Laravel重写用户登录简单示例
- 利用php-cli和任务计划实现订单同步功能的方法
- Python的另外几种语言实现
- python选择排序算法实例总结
- C#下listview如何插入图片
- 优秀程序员必须知道的20个位运算技巧
- 浅谈android获取设备唯一标识完美解决方案
- 自适应高度框架 ----属个人收藏内容
- Android Doze模式启用和恢复详解
- node.js中的fs.close方法使用说明
- linux系统mysql自动备份并使用ftp上传的方法
- Linux 进程替换(exec函数)实现代码
- java文件操作之java写文件简单示例