【发布时间】:2014-07-10 19:17:33
【问题描述】:
我正在尝试从用户提交的表单中转换一些 MS Word 字符。
使用 array_walk 遍历 $_POST 变量似乎是最好的方法,但是当我调用我的“sanitize_msword_characters”函数时它不起作用。
以下 array_walk 调用我的“sanitize_msword_characters”函数不会导致任何字符被替换:
array_walk('sanitize_msword_characters', $_POST);
function sanitize_msword_characters($data = '')
{
$data= str_replace("‘", "'", $data);
$data= str_replace("’", "'", $data);
$data= str_replace("”", '"', $data);
$data= str_replace("“", '"', $data);
$data= str_replace("–", "-", $data);
$data= str_replace("—", "--", $data);
$data= str_replace("…", "...", $data);
return $data;
}
以下 array_walk 确实有效,但我必须将它放在处理表单的每个 php 文件中:
array_walk($_POST, function(&$value, &$key) {
$value = str_replace("‘", "'", $value);
$value = str_replace("’", "'", $value);
$value = str_replace("”", '"', $value);
$value = str_replace("“", '"', $value);
$value = str_replace("–", "-", $value);
$value = str_replace("—", "--", $value);
$value = str_replace("…", "...", $value);
});
我尝试将上面的 array_walk 代码放在一个函数中(见下文),但它没有进行替换,尽管没有产生错误。
function sanitize_msword_characters($data = '')
{
array_walk($data, function(&$value, &$key) {
$value = str_replace("‘", "'", $value);
$value = str_replace("’", "'", $value);
$value = str_replace("”", '"', $value);
$value = str_replace("“", '"', $value);
$value = str_replace("–", "-", $value);
$value = str_replace("—", "--", $value);
$value = str_replace("…", "...", $value);
$value = str_replace("–", "--", $value);
});
return $data;
}
我的问题是我可以做些什么来获得一个使用 array_walk 给我预期结果的函数?
【问题讨论】:
-
使用
array_walk($_POST, sanitize_msword_characters);,这似乎更接近预期的语法。 -
第一个示例不起作用,因为参数的顺序错误。在此处查看
array_walk()的文档。第一个参数是数组,第二个参数是回调函数。此外,您的回调函数应该是函数的名称而不是字符串(即sanitize_msword_characters而不是"sanitize_msword_characters")。 -
@njzk2 我在玩array_map时切换了参数,它显然具有与array_walk相反的参数...更改语法后,它仍然不起作用。
-
更新:我让 array_walk 工作,但前提是它调用的函数在同一个文件中。如果该函数在另一个文件中并包含在内,则它不起作用,并且不会产生错误。所以,我想问题是如果 array_walk 调用的函数在另一个文件中,为什么它不能工作?