如何为我的函数编写测试用例? PHP

时间:2015-09-11 14:41:24

标签: php regex foreach preg-replace str-replace

我需要为这个函数编写一个测试用例,但我似乎无法正确使用它。如果这意味着什么,我正在测试我的本地机器。

function cleanEncoding($a)
// Replace specified foreign character with equivalent english character
{ $filter = ['"' => '"',
       '"' => '"',
       '&' => '&',
       '&' => '&',
       '&#60;' => '<',
       '&#lt;' => '<',
       '&#62;' => '>',
       '&#gt;' => '>',
       '&#160;' => ' ',

       '&#224;' => 'a',
       '&#225;' => 'a',
       '&#226;' => 'a',
       '&#227;' => 'a',
       '&#228;' => 'a',
       '&#229;' => 'a',
       '&#230;' => 'a',
       '&#231;' => 'c',
       '&#232;' => 'e',
       '&#233;' => 'e',
       '&#234;' => 'e',
       '&#235;' => 'e',
       '&#236;' => 'i',
       '&#237;' => 'i',
       '&#238;' => 'i',
       '&#239;' => 'i',
       '&#241;' => 'n',
       '&#240;' => 'o',
       '&#242;' => 'o',
       '&#243;' => 'o',
       '&#244;' => 'o',
       '&#245;' => 'o',
       '&#246;' => 'o',
       '&#248;' => 'o',
       '&#249;' => 'u',
       '&#250;' => 'u',
       '&#251;' => 'u',
       '&#252;' => 'u',
       '&#253;' => 'y',
       '&#255;' => 'y',
       '&#339;' => 'oe',
       '&#353;' => 's',

       '&#192;' => 'A',
       '&#193;' => 'A',
       '&#194;' => 'A',
       '&#195;' => 'A',
       '&#196;' => 'A',
       '&#197;' => 'A',
       '&#198;' => 'A',
       '&#199;' => 'C',
       '&#200;' => 'E',
       '&#201;' => 'E',
       '&#202;' => 'E',
       '&#203;' => 'E',
       '&#204;' => 'I',
       '&#205;' => 'I',
       '&#206;' => 'I',
       '&#207;' => 'I',
       '&#209;' => 'N',
       '&#210;' => 'O',
       '&#211;' => 'O',
       '&#212;' => 'O',
       '&#213;' => 'O',
       '&#214;' => 'O',
       '&#216;' => 'O',
       '&#217;' => 'U',
       '&#218;' => 'U',
       '&#219;' => 'U',
       '&#220;' => 'U',
       '&#221;' => 'Y',
       '&#376;' => 'Y',
       '&#338;' => 'OE',
       '&#352;' => 'S',];
// replace foreign character with equivalent english character
foreach ($filter as $b => $c) {
$d = str_replace($b, $c, $a);
}
// deletes foreign character that was not found
$d = preg_replace(("/&#[0-9]*;/","",$a);
return ($a);
}

这是我的测试代码。它打印出来但仍然是外国字符。我需要用等同的英文字符打印。

$a = 'H&#234;ll&#248; W&#244;rld!&#36;';
$e = cleanEncoding($a);
echo $e;

2 个答案:

答案 0 :(得分:1)

正如其他人所指出的那样,您的str_replacepreg_replacereturn似乎存在问题。

迭代过滤器:

foreach ($filter as $key => $value) {
    $a = str_replace($key, $value, $a);
}

然后用空白字符串替换任何未找到的内容:

$a = preg_replace("/&#[0-9]*;/","", $a);

然后返回该字符串:

return $a;

答案 1 :(得分:0)

试试这个,你的代码有一些语法错误

function cleanEncoding($a){
// Replace specified foreign character with equivalent english character
 $filter = Array('&#34;' => '"',
'&quot;' => '"',
'&#38;' => '&',
'&#38;' => '&',
'&#60;' => '<',
'&#lt;' => '<',
'&#62;' => '>',
'&#gt;' => '>',
'&#160;' => ' ',

'&#224;' => 'a',
'&#225;' => 'a',
'&#226;' => 'a',
'&#227;' => 'a',
'&#228;' => 'a',
'&#229;' => 'a',
'&#230;' => 'a',
'&#231;' => 'c',
'&#232;' => 'e',
'&#233;' => 'e',
'&#234;' => 'e',
'&#235;' => 'e',
'&#236;' => 'i',
'&#237;' => 'i',
'&#238;' => 'i',
'&#239;' => 'i',
'&#241;' => 'n',
'&#240;' => 'o',
'&#242;' => 'o',
'&#243;' => 'o',
'&#244;' => 'o',
'&#245;' => 'o',
'&#246;' => 'o',
'&#248;' => 'o',
'&#249;' => 'u',
'&#250;' => 'u',
'&#251;' => 'u',
'&#252;' => 'u',
'&#253;' => 'y',
'&#255;' => 'y',
'&#339;' => 'oe',
'&#353;' => 's',

'&#192;' => 'A',
'&#193;' => 'A',
'&#194;' => 'A',
'&#195;' => 'A',
'&#196;' => 'A',
'&#197;' => 'A',
'&#198;' => 'A',
'&#199;' => 'C',
'&#200;' => 'E',
'&#201;' => 'E',
'&#202;' => 'E',
'&#203;' => 'E',
'&#204;' => 'I',
'&#205;' => 'I',
'&#206;' => 'I',
'&#207;' => 'I',
'&#209;' => 'N',
'&#210;' => 'O',
'&#211;' => 'O',
'&#212;' => 'O',
'&#213;' => 'O',
'&#214;' => 'O',
'&#216;' => 'O',
'&#217;' => 'U',
'&#218;' => 'U',
'&#219;' => 'U',
'&#220;' => 'U',
'&#221;' => 'Y',
'&#376;' => 'Y',
'&#338;' => 'OE',
'&#352;' => 'S');
// replace foreign character with equivalent english character
$d=$a;
foreach ($filter as $b => $c) {
    $d = str_replace($b, $c, $d);
}
// deletes foreign character that was not found
$d = preg_replace("/&#[0-9]*;/","",$d);
return ($d);
}
$a = 'H&#234;ll&#248; W&#244;rld!&#36;';
$e = cleanEncoding($a);
echo $e;