Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP-筛选器_SANITIZE_编码无法正常工作_Php - Fatal编程技术网

PHP-筛选器_SANITIZE_编码无法正常工作

PHP-筛选器_SANITIZE_编码无法正常工作,php,Php,首先我想知道什么是FILTER_SANITIZE_编码的默认标志 当我尝试时: filter_var('α', FILTER_SANITIZE_ENCODED, FILTER_FLAG_ENCODE_LOW); 当我使用FILTER\u FLAG\u ENCODE\u LOW时,“α”ascii是224,它应该编码小于32的ascii值。但当我输入224个ascii字符时,它被编码了 (编辑)我不想对127以上的ascii字符进行编码,但它返回“%CE%B1”我不确定我是否完全理解您想要的内容

首先我想知道什么是FILTER_SANITIZE_编码的默认标志

当我尝试时:

filter_var('α', FILTER_SANITIZE_ENCODED, FILTER_FLAG_ENCODE_LOW);
当我使用
FILTER\u FLAG\u ENCODE\u LOW
时,“α”ascii是224,它应该编码小于32的ascii值。但当我输入224个ascii字符时,它被编码了


(编辑)我不想对127以上的ascii字符进行编码,但它返回“%CE%B1”

我不确定我是否完全理解您想要的内容,但是。。这行吗

函数编码(字符串$str):字符串
{
$ret=“”;
对于($i=0,$max=strlen($str);$i<$max;++$i){
如果(作战需求文件($str[$i])>127){
$ret.=$str[$i];
}否则{
$ret.=urlencode($str[$i]);
}
}
返回$ret;
}
它对所有字符进行URL编码,但uint8值高于127的字符除外,这些字符保持不变。。这就是你想要的吗

编辑:另一种可能性,如果您正在谈论CP-437,您想对CP-437中除127以上字符以外的所有字符进行URL编码吗?那么,

function urlencode_cp437(string $str): string
{
    $ret = "";
    for ($i = 0, $max = strlen($str); $i < $max; ++ $i) {
        if (ord($str[$i]) > 127 && mb_check_encoding($str[$i], 'CP-437')) {
            $ret .= $str[$i];
        } else {
            $ret .= urlencode($str[$i]);
        }
    }
    return $ret;
}
函数urlencode_cp437(字符串$str):字符串 { $ret=“”; 对于($i=0,$max=strlen($str);$i<$max;++$i){ 如果(作战需求文件($str[$i])>127和&mb检查编码($str[$i],'CP-437')){ $ret.=$str[$i]; }否则{ $ret.=urlencode($str[$i]); } } 返回$ret; }
  • 我想是吧?(未经测试,但我想应该有效?)
  • 可能应该使用而不是ord(),但由于CP-427是一种单字节ascii兼容编码,并且mb_ord在PHP7.2之前不存在,我想ord()无论如何都可以工作,idk

指定预期的输出以及采用何种编码得到的结果?在UTF-8中是十进制206177,在CP-437中是十进制224,在Windows-1253中是十进制225。如果你的意思是CP-437,那么请具体说明你应该使用high而不是low。在本网站中,w3并不尊重这一点,但他们向我解释得很好,请看这里@hanshenrik抱歉,我的意思是224。在acsii中,表224是“α”字符。ASCII从0到127。没有224号。:-?