编码字符串以匹配PHP POST数组中的编码表单字段名称

时间:2015-06-15 06:46:23

标签: php post encoding

我的HTML复选框表单字段的名称是这样的:

name = "Some File name.pdf"

PHP POST数组看起来像这样(一些字符用下划线代替):

array(
 "Some_File_name_pdf" => "on"
)

我是否可以使用PHP函数来转换文件名字符串,就像它在POST数组中一样?我对str_replace不感兴趣。 我希望能够做到这一点:

$myfilename = $obj->getFileName(); // returns "Some File name.pdf"
$result = isset($_POST[some_encoding_function($myfilename)]);

some_encoding_function应该使用类似“Some File name.pdf”的字符串并返回类似“Some_File_name_pdf”的内容;

1 个答案:

答案 0 :(得分:2)

根据the PHP documentation

  

变量名中的点和空格将转换为下划线。

这只需要一个简单的字符串替换 但是,根据a comment on that page

  

PHP转换为_(下划线)的字段名称字符的完整列表如下(不仅仅是点):
  chr(32)()(空格)
  chr(46)(。)(点)
  chr(91)([)(空心方括号)
  chr(128) - chr(159)(各种)

如果该评论是正确的,那么你应该选择像这样的函数

function underscorify($s)
{
    return preg_replace('/[ \.\[\x80-\x9F]/', '_', $s);
}

但是请注意chr(128) - chr(159)是不明确的,因为没有提到这是否依赖于字符编码。
它可以引用从Ÿ的所有ASCII字符,它可以引用\u0080 - \u009F中的所有UTF-8控制字符,或者它可能只是硬编码为检查b >= 128 && b <= 159的字节值。