نمایش نتایج: از شماره 1 تا 10 , از مجموع 10

موضوع: این تابع چه بلایی سر رشته میاره؟

  1. #1
    کاربر اخراج شده
    تاریخ عضویت
    Aug 2017
    نوشته ها
    37
    تشکر تشکر کرده 
    43
    تشکر تشکر شده 
    6
    تشکر شده در
    5 پست

    Question این تابع چه بلایی سر رشته میاره؟

    سلام بر دوستان و بزرگان انجمن

    یک تابع دارم به شکل زیر:

    کد PHP:
    function clear_string($str) {
    $clear_text htmlentities($strnull'UTF-8');
    $clear_text str_ireplace([' ','‌'], [' '' '], $clear_text);
    $clear_text preg_replace('/&#?[a-z0-9]+;/i'''$clear_text);
    $clear_text html_entity_decode($clear_text);
    $clear_text preg_replace('/\s+/'' '$clear_text);
    $clear_text trim($clear_text);
    return 
    $clear_text;} 
    میخوام شما بگید به شکل مرحله به مرحله داره رو متنی که گرفته چه عملیاتی رو پیاده میکنه؟

    تشکر
    ویرایش توسط mehran-b : August 12th, 2017 در ساعت 20:13

  2. # ADS




     

  3. #2
    عضو انجمن starting آواتار ها
    تاریخ عضویت
    Jul 2015
    محل سکونت
    6346cc631627632
    نوشته ها
    255
    تشکر تشکر کرده 
    612
    تشکر تشکر شده 
    372
    تشکر شده در
    245 پست

    پیش فرض پاسخ : این تابع چه بلایی سر رشته میاره؟

    htmlentities
    PHP str_ireplace Function

    preg_match in php tutorial

    html_entity_decode

    trim هم اسپیس ها رو از دو طرف استرینگ برمیداره

    کلا کار مسخره ای کرده
    از این استفاده کنید
    کد PHP:
    function test_input($data) {
      
    $data trim($data);
      
    $data stripslashes($data);
      
    $data htmlspecialchars($data);
      return 
    $data;
      } 
    موارد زیر هم Entity های استفاده شده در تابع خودتون
    Char Dec Hex Entity Name
      8192 2000 EN QUAD
    8193 2001 EM QUAD
    8194 2002   EN SPACE
    8195 2003   EM SPACE
    8196 2004 THREE-PER-EM SPACE
    8197 2005 FOUR-PER-EM SPACE
    8198 2006 SIX-PER-EM SPACE
    8199 2007 FIGURE SPACE
    8200 2008 PUNCTUATION SPACE
    8201 2009   THIN SPACE
    8202 200A HAIR SPACE
    8203 200B ZERO WIDTH SPACE
    8204 200C ‌ ZERO WIDTH NON-JOINER
    8205 200D ‍ ZERO WIDTH JOINER
    8206 200E ‎ LEFT-TO-RIGHT MARK
    8207 200F ‏ RIGHT-TO-LEFT MARK
    8208 2010 HYPHEN
    8209 2011 NON-BREAKING HYPHEN
    8210 2012 FIGURE DASH
    8211 2013 – EN DASH
    8212 2014 — EM DASH
    8213 2015 HORIZONTAL BAR
    8214 2016 DOUBLE VERTICAL LINE
    8215 2017 DOUBLE LOW LINE
    8216 2018 ‘ LEFT SINGLE QUOTATION MARK
    8217 2019 ’ RIGHT SINGLE QUOTATION MARK
    8218 201A ‚ SINGLE LOW-9 QUOTATION MARK
    8219 201B SINGLE HIGH-REVERSED-9 QUOTATION MARK
    8220 201C “ LEFT DOUBLE QUOTATION MARK
    8221 201D ” RIGHT DOUBLE QUOTATION MARK
    8222 201E „ DOUBLE LOW-9 QUOTATION MARK
    8223 201F DOUBLE HIGH-REVERSED-9 QUOTATION MARK
    8224 2020 † DAGGER
    8225 2021 ‡ DOUBLE DAGGER
    8226 2022 • BULLET
    8227 2023 TRIANGULAR BULLET
    8228 2024 ONE DOT LEADER
    8229 2025 TWO DOT LEADER
    8230 2026 … HORIZONTAL ELLIPSIS
    8231 2027 HYPHENATION POINT
    8232 2028 LINE SEPARATOR
    8233 2029 PARAGRAPH SEPARATOR
    8234 202A LEFT-TO-RIGHT EMBEDDING
    8235 202B RIGHT-TO-LEFT EMBEDDING
    8236 202C POP DIRECTIONAL FORMATTING
    8237 202D LEFT-TO-RIGHT OVERRIDE
    8238 202E RIGHT-TO-LEFT OVERRIDE
    8239 202F NARROW NON-BREAK SPACE
    8240 2030 ‰ PER MILLE SIGN
    8241 2031 PER TEN THOUSAND SIGN
    8242 2032 ′ PRIME
    8243 2033 ″ DOUBLE PRIME
    8244 2034 TRIPLE PRIME
    8245 2035 REVERSED PRIME
    8246 2036 REVERSED DOUBLE PRIME
    8247 2037 REVERSED TRIPLE PRIME
    8248 2038 CARET
    8249 2039 ‹ SINGLE LEFT-POINTING ANGLE QUOTATION MARK
    8250 203A › SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
    8251 203B REFERENCE MARK
    8252 203C DOUBLE EXCLAMATION MARK
    8253 203D INTERROBANG
    8254 203E ‾ OVERLINE
    8255 203F UNDERTIE
    8256 2040 CHARACTER TIE
    8257 2041 CARET INSERTION POINT
    8258 2042 ASTERISM
    8259 2043 HYPHEN BULLET
    8260 2044 ⁄ FRACTION SLASH
    8261 2045 LEFT SQUARE BRACKET WITH QUILL
    8262 2046 RIGHT SQUARE BRACKET WITH QUILL
    8263 2047 DOUBLE QUESTION MARK
    8264 2048 QUESTION EXCLAMATION MARK
    8265 2049 EXCLAMATION QUESTION MARK
    8266 204A TIRONIAN SIGN ET
    8267 204B REVERSED PILCROW SIGN
    8268 204C BLACK LEFTWARDS BULLET
    8269 204D BLACK RIGHTWARDS BULLET
    8270 204E LOW ASTERISK
    8271 204F REVERSED SEMICOLON
    8272 2050 CLOSE UP
    8273 2051 TWO ASTERISKS ALIGNED VERTICALLY
    8274 2052 COMMERCIAL MINUS SIGN
    8275 2053 SWUNG DASH
    8276 2054 INVERTED UNDERTIE
    8277 2055 FLOWER PUNCTUATION MARK
    8278 2056 THREE DOT PUNCTUATION
    8279 2057 QUADRUPLE PRIME
    8280 2058 FOUR DOT PUNCTUATION
    8281 2059 FIVE DOT PUNCTUATION
    8282 205A TWO DOT PUNCTUATION
    8283 205B FOUR DOT MARK
    8284 205C DOTTED CROSS
    8285 205D TRICOLON
    8286 205E VERTICAL FOUR DOTS
    8287 205F MEDIUM MATHEMATICAL SPACE
    8288 2060 WORD JOINER
    8289 2061 FUNCTION APPLICATION
    8290 2062 INVISIBLE TIMES
    8291 2063 INVISIBLE SEPARATOR
    8292 2064 INVISIBLE PLUS
    8294 2066 LEFT-TO-RIGHT ISOLATE
    8295 2067 RIGHT-TO-LEFT ISOLATE
    8296 2068 FIRST STRONG ISOLATE
    8297 2069 POP DIRECTIONAL ISOLATE
    8298 206A INHIBIT SYMMETRIC SWAPPING
    8299 206B ACTIVATE SYMMETRIC SWAPPING
    8300 206C INHIBIT ARABIC FORM SHAPING
    8301 206D ACTIVATE ARABIC FORM SHAPING
    8302 206E NATIONAL DIGIT SHAPES
    8303 206F NOMINAL DIGIT SHAPES
    -----

  4. تعداد تشکر ها از starting به دلیل پست مفید


  5. #3
    عضو دائم T.Toosi آواتار ها
    تاریخ عضویت
    Jun 2015
    نوشته ها
    1,071
    تشکر تشکر کرده 
    278
    تشکر تشکر شده 
    2,936
    تشکر شده در
    1,329 پست

    پیش فرض پاسخ : این تابع چه بلایی سر رشته میاره؟

    باسلام، هدف متد شما پاک کردن تمام Html Entities ها است، Entity هم کارکتر های رزرو شده در html مثل > < & " و .. است، Entity ها به 2 صورت زیر قابل استفاده در کد هامون است :

    کد:
    &entity_name;
    کد:
    &#entity_number;
    شما اگر ورودی یک رشته : Toosi <salam> بدید در خط اول رشته تبدیل به Toosi &lt;salam&gt; خواهد شد، در خط بعدی دو تا Entity خودش مشخص کرده است که اگر موجود بود پاک کند (&zwnj; و &nbsp) در خط بعدی هرچه Entity Number و Entity Name پیدا کند پاک میکند، در خط بعدی تمامی Entity باقی مانده را به کارکتر خوانا تبدیل میکند (در کدی که گذاشتید لازم نیست چون با preg_replace که هست هیچ Entity باقی نخواهد ماند که Decode کند)، در خط بعدی اگر رشته حاوی چند خط باشد همه را به یک خط تبدیل خواهد کرد (newline ها را به white space تبدیل میکند)، در خط بعدی هم فاصله های دو طرف رشته را پاک خواهد کرد و خروجی Toosi salam خواهد شد.
    ویرایش توسط T.Toosi : August 12th, 2017 در ساعت 22:43

  6. تعداد تشکر ها ازT.Toosi به دلیل پست مفید


  7. #4
    کاربر اخراج شده
    تاریخ عضویت
    Aug 2017
    نوشته ها
    37
    تشکر تشکر کرده 
    43
    تشکر تشکر شده 
    6
    تشکر شده در
    5 پست

    پیش فرض پاسخ : این تابع چه بلایی سر رشته میاره؟

    نقل قول نوشته اصلی توسط T.Toosi نمایش پست ها
    باسلام، هدف متد شما پاک کردن تمام Html Entities ها است، Entity هم کارکتر های رزرو شده در html مثل > < & " و .. است، Entity ها به 2 صورت زیر قابل استفاده در کد هامون است :

    کد:
    &entity_name;
    کد:
    &#entity_number;
    شما اگر ورودی یک رشته : Toosi <salam> بدید در خط اول رشته تبدیل به Toosi &lt;salam&gt; خواهد شد، در خط بعدی دو تا Entity خودش مشخص کرده است که اگر موجود بود پاک کند (&zwnj; و &nbsp) در خط بعدی هرچه Entity Number و Entity Name پیدا کند پاک میکند، در خط بعدی تمامی Entity باقی مانده را به کارکتر خوانا تبدیل میکند (در کدی که گذاشتید لازم نیست چون با preg_replace که هست هیچ Entity باقی نخواهد ماند که Decode کند)، در خط بعدی اگر رشته حاوی چند خط باشد همه را به یک خط تبدیل خواهد کرد (newline ها را به white space تبدیل میکند)، در خط بعدی هم فاصله های دو طرف رشته را پاک خواهد کرد و خروجی Toosi salam خواهد شد.
    پس طبق فرمایش شما بعد از preg_replace تمامی چیزهایی که از html میمونه توی متن از بین میره و html_entity_decode توی کد بیهوده استفاده شده؟

    مورد بعدی اینکه در htmlentities در پارامتر دوم از null استفاده شده. این به این معنی هست که از مقدار پیشفرض استفاده بشه؟

    تشکر

  8. #5
    عضو دائم T.Toosi آواتار ها
    تاریخ عضویت
    Jun 2015
    نوشته ها
    1,071
    تشکر تشکر کرده 
    278
    تشکر تشکر شده 
    2,936
    تشکر شده در
    1,329 پست

    پیش فرض پاسخ : این تابع چه بلایی سر رشته میاره؟

    نقل قول نوشته اصلی توسط mehran-b نمایش پست ها
    پس طبق فرمایش شما بعد از preg_replace تمامی چیزهایی که از html میمونه توی متن از بین میره و html_entity_decode توی کد بیهوده استفاده شده؟

    مورد بعدی اینکه در htmlentities در پارامتر دوم از null استفاده شده. این به این معنی هست که از مقدار پیشفرض استفاده بشه؟

    تشکر
    این لاین ها بیهوده است :

    کد:
    $clear_text = str_ireplace(['&nbsp;','&zwnj;'], [' ', ' '], $clear_text);
    کد:
    $clear_text = html_entity_decode($clear_text);
    به دلیل اینکه لاین زیر تمام Entity ها را پاک میکند :

    کد:
    $clear_text = preg_replace('/&#?[a-z0-9]+;/i', '', $clear_text);

    پارامتر دوم htmlentities هم flags هست، برای مدیریت الگوریتم کدگذاری نامعتبر و کوتیشن ها استفاده میشود.

    کد:
    http://php.net/manual/en/function.htmlentities.php

  9. تعداد تشکر ها ازT.Toosi به دلیل پست مفید


  10. #6
    عضو انجمن starting آواتار ها
    تاریخ عضویت
    Jul 2015
    محل سکونت
    6346cc631627632
    نوشته ها
    255
    تشکر تشکر کرده 
    612
    تشکر تشکر شده 
    372
    تشکر شده در
    245 پست

    پیش فرض پاسخ : این تابع چه بلایی سر رشته میاره؟

    نقل قول نوشته اصلی توسط mehran-b نمایش پست ها
    پس طبق فرمایش شما بعد از preg_replace تمامی چیزهایی که از html میمونه توی متن از بین میره و html_entity_decode توی کد بیهوده استفاده شده؟

    مورد بعدی اینکه در htmlentities در پارامتر دوم از null استفاده شده. این به این معنی هست که از مقدار پیشفرض استفاده بشه؟

    تشکر
    بله فانکشن زیر لازم نیست و الکی اجرا میشه(بود و نبودش سودی نداره)
    کد PHP:
    );
    $clear_text html_entity_decode($clear_text); 
    نال رو چون نمیخواسته از هیچ flags استفاده کنه و قصد ست کردن کارکتر ست داشته اورده که تابع اتربیوت هاشو بشانسه با اینکه نیازی هم نبود استفاده کنه
    کد PHP:
       htmlentities(string,flags,character-set,double_encode
    - - - Updated - - -

    نقل قول نوشته اصلی توسط T.Toosi نمایش پست ها
    این لاین ها بیهوده است :

    کد:
    $clear_text = str_ireplace(['&nbsp;','&zwnj;'], [' ', ' '], $clear_text);
    کد:
    $clear_text = html_entity_decode($clear_text);
    به دلیل اینکه لاین زیر تمام Entity ها را پاک میکند :
    شاید برای مورد اولی هدفش پاک کردن فاصله ها بوده
    چون در صورت عدم وجود در انتها فانکشن با رشته عبارت nbsp; رو همراه با رشته برمیگردوند
    -----

  11. تعداد تشکر ها از starting به دلیل پست مفید


  12. #7
    کاربر اخراج شده
    تاریخ عضویت
    Aug 2017
    نوشته ها
    37
    تشکر تشکر کرده 
    43
    تشکر تشکر شده 
    6
    تشکر شده در
    5 پست

    پیش فرض پاسخ : این تابع چه بلایی سر رشته میاره؟

    شاید برای مورد اولی هدفش پاک کردن فاصله ها بوده
    چون در صورت عدم وجود در انتها فانکشن با رشته عبارت nbsp; رو همراه با رشته برمیگردوند
    بله. نیم فاصله و فاصله رو تبدیل کرده به فاصله و بقیه Entity رو حذف کرده.

    ولی من بارم نفهمیدم در htmlentities وقتی flags رو null گذاشته یعنی تابع بدون flags کار میکنه و اروری نمیده یا نه چون flag دیفالت یعنی ENT_COMPAT | ENT_HTML401 رو استفاده میکنه اروری نمیده؟

  13. #8
    عضو انجمن starting آواتار ها
    تاریخ عضویت
    Jul 2015
    محل سکونت
    6346cc631627632
    نوشته ها
    255
    تشکر تشکر کرده 
    612
    تشکر تشکر شده 
    372
    تشکر شده در
    245 پست

    پیش فرض پاسخ : این تابع چه بلایی سر رشته میاره؟

    نقل قول نوشته اصلی توسط mehran-b نمایش پست ها
    بله. نیم فاصله و فاصله رو تبدیل کرده به فاصله و بقیه Entity رو حذف کرده.

    ولی من بارم نفهمیدم در htmlentities وقتی flags رو null گذاشته یعنی تابع بدون flags کار میکنه و اروری نمیده یا نه چون flag دیفالت یعنی ENT_COMPAT | ENT_HTML401 رو استفاده میکنه اروری نمیده؟
    ببینید هر تابع ورودی ها رو براساس ترتیب خودش میگیره
    ایشون میخواسته استرینگ رو بده و از کارکتر ست هم استفاده کنه پس یا باید اتربیوت دوم رو تال بزاره

    پیشنهاد میدم از phpstorm بعنوان ادیتور در کد نویسی استفاده کنید
    -----

  14. تعداد تشکر ها از starting به دلیل پست مفید


  15. #9
    کاربر اخراج شده
    تاریخ عضویت
    Aug 2017
    نوشته ها
    37
    تشکر تشکر کرده 
    43
    تشکر تشکر شده 
    6
    تشکر شده در
    5 پست

    پیش فرض پاسخ : این تابع چه بلایی سر رشته میاره؟

    نقل قول نوشته اصلی توسط starting نمایش پست ها
    ببینید هر تابع ورودی ها رو براساس ترتیب خودش میگیره
    ایشون میخواسته استرینگ رو بده و از کارکتر ست هم استفاده کنه پس یا باید اتربیوت دوم رو تال بزاره

    پیشنهاد میدم از phpstorm بعنوان ادیتور در کد نویسی استفاده کنید
    بله در این حد متوجه هستم. ولی وقتی که بخوان یه آرگومان رو رد کنن جاش null نمیذارن معمولا مقدار دیفالت رو قرار میدن.

    الان می میخوام بدون این کد

    کد PHP:
    htmlentities($strnull'UTF-8'); 
    str ورودی رو با چه flag ای خروجی میده؟

    تشکر بابت تامل

  16. #10
    عضو دائم T.Toosi آواتار ها
    تاریخ عضویت
    Jun 2015
    نوشته ها
    1,071
    تشکر تشکر کرده 
    278
    تشکر تشکر شده 
    2,936
    تشکر شده در
    1,329 پست

    پیش فرض پاسخ : این تابع چه بلایی سر رشته میاره؟

    شاید برای مورد اولی هدفش پاک کردن فاصله ها بوده
    چون در صورت عدم وجود در انتها فانکشن با رشته عبارت nbsp; رو همراه با رشته برمیگردوند
    ورودی تابع رشته است بدون entity name، داخل تابع توسط متد htmlentities کارکتر هامون به entity تبدیل خواهد شد، اما اگر در ورودی تابع &nbsp; ارسال کنید به مشکل میخورد و nbsp; برگشت میدهد (به صورت خلاصه اگر ورودی تابع مستقیم بنویسیم &nbsp; خروجی nbsp; خواهد آمد)

    نکته ی دیگری که هست در فلگ دیفالت (ENT_HTML401) این متد از کارکتر non breaking space یا همون &nbsp; پشتیبانی نمی کند، پس اگر ورودی تابع بالای ما non breaking space داشته باشد، متد htmlentities همون کارکتر فاصله را نمایش میدهد و نه &nbsp; و حتی &zwnj; هم پشتیبانی نمیکند (کلا 4 تا کارکتر فلگ دیفالت پشتیبانی میکند که در پایین لیست کردم) برای همین کلا این لاین اضافه و بدون کاربرد است مگر اینکه فلگ را عوض کنیم.

    بله. نیم فاصله و فاصله رو تبدیل کرده به فاصله و بقیه Entity رو حذف کرده.
    درست است، فاصله ها را تبدیل کرده است، اگر نباشد و چند جمله باشد بهم میچسبند.

    ولی من بارم نفهمیدم در htmlentities وقتی flags رو null گذاشته یعنی تابع بدون flags کار میکنه و اروری نمیده یا نه چون flag دیفالت یعنی ENT_COMPAT | ENT_HTML401 رو استفاده میکنه اروری نمیده؟
    این پارامتر اختیاری است، حالا اگر میخواهید ببینید اگر مقدار null بزاریم چه کارکتر هایی را این فلگ پشتیبانی میکند به صورت زیر عمل کنید : (null هم بزارید باز از ENT_HTML401 استفاده خواهد کرد)

    کد PHP:
    var_dump(get_html_translation_table(null)); 
    خروجی :

    کد:
    array (size=4)
      '"' => string '&quot;' (length=6)
      '&' => string '&amp;' (length=5)
      '<' => string '&lt;' (length=4)
      '>' => string '&gt;' (length=4)
    حالا از فلگ زیر استفاده کنید :

    کد PHP:
    var_dump(get_html_translation_table(ENT_HTML5)); 
    خروجی :

    کد:
    array (size=252)
      '"' => string '&quot;' (length=6)
      '&' => string '&amp;' (length=5)
      '<' => string '&lt;' (length=4)
      '>' => string '&gt;' (length=4)
      ' ' => string '&nbsp;' (length=6)
      '¡' => string '&iexcl;' (length=7)
      '¢' => string '&cent;' (length=6)
      '£' => string '&pound;' (length=7)
      '¤' => string '&curren;' (length=8)
      '¥' => string '&yen;' (length=5)
      '¦' => string '&brvbar;' (length=8)
      '§' => string '&sect;' (length=6)
      '¨' => string '&uml;' (length=5)
      '©' => string '&copy;' (length=6)
      'ª' => string '&ordf;' (length=6)
      '«' => string '&laquo;' (length=7)
      '¬' => string '&not;' (length=5)
      '­' => string '­' (length=5)
      '®' => string '&reg;' (length=5)
      '¯' => string '&macr;' (length=6)
      '°' => string '&deg;' (length=5)
      '±' => string '&plusmn;' (length=8)
      '²' => string '&sup2;' (length=6)
      '³' => string '&sup3;' (length=6)
      '´' => string '&acute;' (length=7)
      'µ' => string '&micro;' (length=7)
      '¶' => string '&para;' (length=6)
      '·' => string '&middot;' (length=8)
      '¸' => string '&cedil;' (length=7)
      '¹' => string '&sup1;' (length=6)
      'º' => string '&ordm;' (length=6)
      '»' => string '&raquo;' (length=7)
    میبینید این فلگ 252 تا کارکتر را پشتیبانی و تبدیل میکند، پس اول ببینید رشته ورودی این تابع شما چه Handle ای نیاز دارد و فلگ مناسب با آن را انتخاب کنید.
    ویرایش توسط T.Toosi : August 13th, 2017 در ساعت 03:05

  17. تعداد تشکر ها ازT.Toosi به دلیل پست مفید


اطلاعات موضوع

کاربرانی که در حال مشاهده این موضوع هستند

در حال حاضر 1 کاربر در حال مشاهده این موضوع است. (0 کاربران و 1 مهمان ها)

موضوعات مشابه

  1. پاسخ ها: 0
    آخرين نوشته: June 21st, 2017, 17:51
  2. پاسخ ها: 2
    آخرين نوشته: April 17th, 2017, 17:29
  3. پاسخ ها: 2
    آخرين نوشته: January 30th, 2017, 12:33
  4. پاسخ ها: 10
    آخرين نوشته: December 10th, 2014, 12:31
  5. پاسخ ها: 39
    آخرين نوشته: March 6th, 2014, 11:43

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •