foldrr's weblog

旧ブログ http://d.hatena.ne.jp/foldrr/

PHP でフォームの改行コードを統一する

環境

問題

  • クライアントによって改行コードが異なるので、サーバ側で統一する必要がある。

解決方法

PHP 標準の str_replace では $_POST のような連想配列を変換できないので、str_replace() を再帰するようにしてやる必要がある。

<?php
function str_replace_recursive($from, $to, $a){
    $r = $a;
    array_walk_recursive($r, 'str_replace_recursive_func', array($from, $to));
    return $r;
}

function str_replace_recursive_func(&$v, $k, $opt){
    $v = str_replace($opt[0], $opt[1], $v);
}

$_POST = str_replace_recursive("\r\n", PHP_EOL, $_POST);
$_POST = str_replace_recursive("\r", PHP_EOL, $_POST);
?>

補足

$_GET はエンコーディング変換してはいけないので注意。