/
  • تابع Validation برای UTF-8.

  • ارسال پاسخ   امتیاز موضوع:
    • 1 رأی - میانگین امیتازات: 5
    • 1
    • 2
    • 3
    • 4
    • 5

    حالت موضوعی | حالت خطی تابع Validation برای UTF-8.
    نویسنده پیام
    Y.P.Y آفلاین
    ناظم کل
    *******

    ارسال‌ها: 2,791
    تاریخ عضویت: ۱۳۸۷ دي ۲۸
    اعتبار: 105
    تشکرها : 2183
    ( 4874 تشکر در 2229 ارسال )
    ارسال: #1
    تابع Validation برای UTF-8.
    تابع Validation برای UTF-8:

    http://tobyinkster.co.uk/blog/2007/03/21...alidation/
    کد PHP:
    <?php

    /**
     * PHP UTF-8 Validation Library
     * Copyright (C) 2007 Toby Inkster
     *
     * This library is free software; you can redistribute it and/or
     * modify it under the terms of the GNU Lesser General Public
     * License as published by the Free Software Foundation; either
     * version 2.1 of the License, or (at your option) any later version.
     * 
     * This library is distributed in the hope that it will be useful,
     * but WITHOUT ANY WARRANTY; without even the implied warranty of
     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     * Lesser General Public License for more details.
     * 
     * You should have received a copy of the GNU Lesser General Public
     * License along with this library; if not, write to the Free Software
     * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
     *
     * @author Toby Inkster <URL:http://tobyinkster.co.uk/>
     * @copyright Copyright (C) 2007 Toby Inkster
     * @license http://www.gnu.org/copyleft/lgpl.html GNU Lesser General Public Licence
     */

    /**
     * Utlity function to retrieve the first byte from a string.
     *
     * Note this function has a side-effect. As well as returning the
     * first byte of the string, it also modifies the string passed
     * as a parameter to remove the initial byte.
     *
     * @param string $string String to shift.
     * @return string First byte of string.
     */
    function shift_byte (&$string)
    {
            if (
    strlen($string)<1)
                    return 
    FALSE;

            
    $byte substr($string01);
            
    $string substr($string1);
            return 
    $byte;
    }

    /**
     * Validate a string as UTF-8, and modify the string to remove nasties.
     *
     * Note this function has a side-effect. As well as returning a
     * boolean to indicate whether the given string was valid, it also
     * modifies the string replacing any invalid characters with a
     * replacement character. (The replacement character is a question
     * mark, but you can change this if you like.)
     *
     * Note that in UTF-8, most characters have several alternative
     * representations. RFC 3629 says that the shortest representation
     * is the correct one. Other representations ("overlong forms")
     * are not valid. Earlier UTF-8 specifications did not prohibit
     * overlong forms, though suggest emitting a warning when one is
     * encountered. This function DOES NOT CHECK FOR OVERLONG FORMS!
     *
     * @param string $string String to validate.
     * @return boolean Was the string valid or not?
     */
    function validate_utf8 (&$string)
    {
            
    $new            '';
            
    $valid          TRUE;
            
    $replacement    '?';

            
    /* Loop through each UTF-8 character. */
            
    while (strlen($string))
            {
                    
    /* Array of bytes to store this character. */
                    
    $c = array();

                    
    /* Firstly, assume that a character is a single byte. */
                    
    $c[0] = shift_byte($string);

                    
    /* "Seven Z" notation. */
                    
    if (ord($c[0]) <= 0x7F)
                    {
                            
    $new .= $c[0];
                    }

                    
    /* "Five Y, Six Z" notation. */
                    
    elseif ((ord($c[0]) >= 0xC2) && (ord($c[0]) <= 0xDF))
                    {
                            
    $c[1] = shift_byte($string);

                            if ((
    ord($c[1]) >= 0x80) && (ord($c[1]) <= 0xBF))
                            {
                                    
    $new .= $c[0].$c[1];
                            }
                            else
                            {
                                    
    $new .= $replacement;
                                    
    $valid FALSE;
                            }
                    }

                    
    /* "Four X, Six Y, Six Z" notation. */
                    
    elseif ((ord($c[0]) >= 0xE0) && (ord($c[0]) <= 0xEF))
                    {
                            
    $c[1] = shift_byte($string);
                            
    $c[2] = shift_byte($string);

                            if ((
    ord($c[1]) >= 0x80) && (ord($c[1]) <= 0xBF)
                            &&  (
    ord($c[2]) >= 0x80) && (ord($c[2]) <= 0xBF))
                            {
                                    
    $new .= $c[0].$c[1].$c[2];
                            }
                            else
                            {
                                    
    $new .= $replacement;
                                    
    $valid FALSE;
                            }
                    }

                    
    /* "Three W, Six X, Six Y, Six Z" notation. */
                    
    elseif ((ord($c[0]) >= 0xF0) && (ord($c[0]) <= 0xF4))
                    {
                            
    $c[1] = shift_byte($string);
                            
    $c[2] = shift_byte($string);
                            
    $c[3] = shift_byte($string);

                            if ((
    ord($c[1]) >= 0x80) && (ord($c[1]) <= 0xBF)
                            &&  (
    ord($c[2]) >= 0x80) && (ord($c[2]) <= 0xBF)
                            &&  (
    ord($c[3]) >= 0x80) && (ord($c[3]) <= 0xBF))
                            {
                                    
    $new .= $c[0].$c[1].$c[2].$c[3];
                            }
                            else
                            {
                                    
    $new .= $replacement;
                                    
    $valid FALSE;
                            }
                    }

                    else
                    {
                            
    $new .= $replacement;
                            
    $valid FALSE;
                    }

            }

            
    $string $new;
            return 
    $valid;
    }

    ?>
    __________________________________________________________________________
    وبلاگ: Yousha.Blog.ir

    صدام: "اگر با ارتش شاه ایران طرف بودیم، یک ماهه جنگ را می بردیم"
    http://gulfnews.com/opinion/thinkers/ira...i-1.500997
    ۱۳۸۹ تير ۱۲ ۰۴:۰۰ عصر
    یافتن ارسال‌ها WWW پاسخ با نقل قول
     تشکر شده توسط : amir.s oia php molana parazitt Null Amir.Z kasbookar
    oia آفلاین
    محمد ثانی
    *****

    ارسال‌ها: 2,014
    تاریخ عضویت: ۱۳۸۷ آذر ۲۶
    اعتبار: 66
    تشکرها : 2330
    ( 2091 تشکر در 1290 ارسال )
    ارسال: #2
    RE: تابع Validation برای UTF-8.
    این که همش کامنته!!! Sleepy Wink Big Grin Tongue Angel
    ۱۳۸۹ تير ۱۲ ۰۸:۳۶ عصر
    یافتن ارسال‌ها پاسخ با نقل قول
     تشکر شده توسط :
    admin آفلاین
    وحید سهرابلو
    **********

    ارسال‌ها: 5,697
    تاریخ عضویت: ۱۳۸۷ آذر ۲۴
    اعتبار: 100
    تشکرها : 1362
    ( 6198 تشکر در 3439 ارسال )
    ارسال: #3
    RE: تابع Validation برای UTF-8.
    هر وقت اگه 10 خط كد نوشتي بعد 20 خط كامنت توش گذاشتي يعني كد درستي رو نوشتي
    ۱۳۸۹ تير ۱۷ ۰۸:۴۹ صبح
    یافتن ارسال‌ها پاسخ با نقل قول
     تشکر شده توسط :
    « قدیمی تر | تازه‌ تر »

    ارسال پاسخ
    پرش به انجمن:


    کاربرانِ درحال بازدید از این موضوع: 1 مهمان
    IranPHP.org | تماس با ما | بازگشت به بالا | بازگشت به محتوا | بایگانی | پیوند سایتی RSS