我正在尝试从用户提交的表单转换某些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为我提供预期结果的函数?
答案 0 :(得分:0)
两个问题。首先,array_map
调用中的参数顺序是错误的。其次,您需要将项值作为参考传递以进行更改:
array_walk($_POST, 'sanitize_msword_characters');
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);
}
我会缩短它:
function sanitize_msword_characters(&$data)
{
$s = array("‘","’","”","“","–","—","…");
$r = array("'","'",'"','"',"-","--","...");
$data = str_replace($s, $r, $data);
}
答案 1 :(得分:0)
我终于明白了。包含在单独的函数文件中时array_walk不工作的原因是因为我的functions.php文件的格式是1252(ANSI-Latin I)。我将它转换为UTF-8,现在它可以工作了。当格式为1252(ANSI-Latin I)时,特殊的MS字符未被正确编码,导致array_walk无法正常工作。