-3

重複の可能性:
ereg 式を preg に変換する

私はこの関数をフィルタ ワード (悪い単語) フォームのタイトル/デスクに持っています。今、私のページにereg_replace() is deprecatedphpエラーDeprecated: Function ereg_replace() is deprecated in C:\xampp\htdocs\share\configs\functions.php on line 2750とこれWarning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\share\configs\functions.php:2747) in C:\xampp\htdocs\share\modules\signup\signup.php on line 31が表示されます。何が問題なの? これを修正するには?

これは私の機能です:

    function filter_title($str)
{
    global $config;

    if ( $config['word_filters'] == '1' ) { $str = filterBadWords ( $str ); }
    if ( $config['word_filters'] == '0' ) { $str=mysql_real_escape_string($str); }
    //if ( $config['word_filters'] == '1' ) { $str = filterBadWords ( urlencode($str) ); }

    //$newstr=str_replace('"',"'",$str);
    $pats1 ='\'';  $repls1 ="";
    $pat[] ='\"';  $repl[] ="";
    $pat[] ='\&';  $repl[] =" and ";
    $pat[] ='\~';  $repl[] ="";
    $pat[] ='\@';  $repl[] ="";
    $pat[] ='\#';  $repl[] ="";
    $pat[] ='\$';  $repl[] ="";
    $pat[] ='\%';  $repl[] ="";
    $pat[] ='\^';  $repl[] ="";
    $pat[]='\*';  $repl[]="";
    $pat[]='\(';  $repl[]="";
    $pat[]='\)';  $repl[]="";
    $pat[]='\+';  $repl[]=" ";
    $pat[]='\`';  $repl[]="";
    $pat[]='\=';  $repl[]="";
    $pat[]='\!';  $repl[]="";
    $pat[]='\[';  $repl[]="";
    $pat[]='\]';  $repl[]="";
    $pat[]='\{';  $repl[]="";
    $pat[]='\}';  $repl[]="";
    $pat[]='\;';  $repl[]="";
    $pat[]='\:';  $repl[]="";
    $pat[]='\.';  $repl[]="";
    $pat[]='\/';  $repl[]="";
    $pat[]='\?';  $repl[]="";
    $pat[]='\<';  $repl[]="";
    $pat[]='\>';  $repl[]="";
    //$pat[]='\_';  $repl[]=" ";
    $pat[]="\\\\"; $repl[]="";
    $pat[]='\|';  $repl[]="";
    $pat[]='\,';  $repl[]="";
    $pat[]='\0x';  $repl[]="";

    $newstr = ereg_replace($pats1, $repls1, $str);    // ---> 2747 <---     
    for($i=0;$pat[$i];$i++) {
    $newstr = ereg_replace($pat[$i], $repl[$i], $newstr); // ---> 2750 <---
    }

    $newstr = preg_replace('/\s\s+/', ' ', $newstr); 

    return trim ( $newstr );
}

この私のfilter_descr関数:

function filter_descr($str)
    {
        //$str=mysql_real_escape_string($str);
        global $config;

        if ( $config['word_filters'] == '1' ) { $str = filterBadWords ( $str ); }
        if ( $config['word_filters'] == '0' ) { $str = mysql_real_escape_string($str); }
        //if ( $config['word_filters'] == '1' ) { $str = filterBadWords ( urlencode ( $str ) ); }

        //$newstr=str_replace('"',"'",$str);
        $pats1 = "\'";  $repls1 ="&#39;";
        $pat[] = '\"';  $repl[] ="&#34;";
        $pat[] = '\&';  $repl[] ="&amp;";
        //$pat[] ='\~';  $repl[] ="";
        //$pat[] ='\@';  $repl[] ="";
        //$pat[] ='\#';  $repl[] ="";
        $pat[] = '\$';  $repl[] ="";
        $pat[] = '\%';  $repl[] ="";
        $pat[] = '\{';  $repl[] ="";
        $pat[] = '\}';  $repl[]="";
        $pat[] = '\`';  $repl[]="";
        //$pat[]='\/';  $repl[]="";
        $pat[] = '\<';  $repl[]="";
        $pat[] = '\>';  $repl[]="";
        //$pat[]="\\\\"; $repl[]="";
        $pat[] = '\|';  $repl[]="";
        //$pat[]="\n";  $repl[]="<br>";
        //$pat[]='\r';  $repl[]="<br>";
        $pat[] = '\0x';  $repl[]="";

        $newstr = ereg_replace($pats1, $repls1, $str);

        for($i=0;$pat[$i];$i++) {
        $newstr=ereg_replace($pat[$i], $repl[$i], $newstr);
        }

        $newstr = preg_replace('/\s\s+/', ' ', $newstr);

        return trim ( $newstr );
    } 

PHP サインアップ (LINE 31 コメント):

session_start();
include('../../configs/config.php');

$smarty->assign('country', set_country_box(filter_title($_REQUEST['fcountry'])));
//if somebody is logged in and active, we don't need to see the registration page
if ($_SESSION["USERNAME"]!="" && $_SESSION["IS_ACTIVE"]=="1")
{
    header("Location: $config[base_url]/main");
    exit;
}

//if Cancel is pressed
if (filter_descr($_REQUEST[scancel])!="")
{
    header("Location: $config[base_url]/main"); // ----> LINE 31 <----
    exit;
}
4

2 に答える 2

4

ereg_replace()非推奨なので使用しないでください。を使用しpreg_replace()ます。関数を一目見ただけで、関数を簡単に変換できるはずです。

ヘッダーがすでにエラーを送信している限り。これは、を呼び出す前に非推奨の警告メッセージが出力されることが原因である可能性がありますheader()

上記を修正すると問題が解決するはずですが。これが本番環境である場合は、display_errorsを無効にすることを強く検討する必要があります。

于 2012-07-25T15:01:41.533 に答える
0

ヘッダー関数を使用する場合は常に、実際の出力を送信する前に応答としてスペースが1つでも送信されると、エラーが発生します。

Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\share\configs\functions.php:2747)

php終了タグを閉じないのは良いことです。あなたと空白をチェックしてください、そして他のエラーのために@Jsonはpreg_replace()代わりに答えの使用を与えました。

于 2012-07-25T15:06:59.687 に答える