PHP-筛选器_SANITIZE_编码无法正常工作
首先我想知道什么是FILTER_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_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