توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : این تابع چه بلایی سر رشته میاره؟
میخوام شما بگید به شکل مرحله به مرحله داره رو متنی که گرفته چه عملیاتی رو پیاده میکنه؟
تشکر
starting
August 12th, 2017, 21:34
htmlentities
(http://jee.ir/5rvIe)PHP str_ireplace Function (http://jee.ir/ykBta)
preg_match in php tutorial
(http://jee.ir/3QUTu)
html_entity_decode
(http://jee.ir/EZ0Bt)
trim هم اسپیس ها رو از دو طرف استرینگ برمیداره
کلا کار مسخره ای کرده
از این استفاده کنید
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
T.Toosi
August 12th, 2017, 22:40
باسلام، هدف متد شما پاک کردن تمام Html Entities ها است، Entity هم کارکتر های رزرو شده در html مثل > < & " و .. است، Entity ها به 2 صورت زیر قابل استفاده در کد هامون است :
&entity_name;
&#entity_number;
شما اگر ورودی یک رشته : Toosi <salam> بدید در خط اول رشته تبدیل به Toosi <salam> خواهد شد، در خط بعدی دو تا Entity خودش مشخص کرده است که اگر موجود بود پاک کند (‌ و  ) در خط بعدی هرچه Entity Number و Entity Name پیدا کند پاک میکند، در خط بعدی تمامی Entity باقی مانده را به کارکتر خوانا تبدیل میکند (در کدی که گذاشتید لازم نیست چون با preg_replace که هست هیچ Entity باقی نخواهد ماند که Decode کند)، در خط بعدی اگر رشته حاوی چند خط باشد همه را به یک خط تبدیل خواهد کرد (newline ها را به white space تبدیل میکند)، در خط بعدی هم فاصله های دو طرف رشته را پاک خواهد کرد و خروجی Toosi salam خواهد شد.
mehran-b
August 13th, 2017, 01:11
باسلام، هدف متد شما پاک کردن تمام Html Entities ها است، Entity هم کارکتر های رزرو شده در html مثل > < & " و .. است، Entity ها به 2 صورت زیر قابل استفاده در کد هامون است :
&entity_name;
&#entity_number;
شما اگر ورودی یک رشته : Toosi <salam> بدید در خط اول رشته تبدیل به Toosi <salam> خواهد شد، در خط بعدی دو تا Entity خودش مشخص کرده است که اگر موجود بود پاک کند (‌ و  ) در خط بعدی هرچه Entity Number و Entity Name پیدا کند پاک میکند، در خط بعدی تمامی Entity باقی مانده را به کارکتر خوانا تبدیل میکند (در کدی که گذاشتید لازم نیست چون با preg_replace که هست هیچ Entity باقی نخواهد ماند که Decode کند)، در خط بعدی اگر رشته حاوی چند خط باشد همه را به یک خط تبدیل خواهد کرد (newline ها را به white space تبدیل میکند)، در خط بعدی هم فاصله های دو طرف رشته را پاک خواهد کرد و خروجی Toosi salam خواهد شد.
پس طبق فرمایش شما بعد از preg_replace تمامی چیزهایی که از html میمونه توی متن از بین میره و html_entity_decode توی کد بیهوده استفاده شده؟
مورد بعدی اینکه در htmlentities در پارامتر دوم از null استفاده شده. این به این معنی هست که از مقدار پیشفرض استفاده بشه؟
تشکر
T.Toosi
August 13th, 2017, 01:43
پس طبق فرمایش شما بعد از preg_replace تمامی چیزهایی که از html میمونه توی متن از بین میره و html_entity_decode توی کد بیهوده استفاده شده؟
مورد بعدی اینکه در htmlentities در پارامتر دوم از null استفاده شده. این به این معنی هست که از مقدار پیشفرض استفاده بشه؟
پس طبق فرمایش شما بعد از preg_replace تمامی چیزهایی که از html میمونه توی متن از بین میره و html_entity_decode توی کد بیهوده استفاده شده؟
مورد بعدی اینکه در htmlentities در پارامتر دوم از null استفاده شده. این به این معنی هست که از مقدار پیشفرض استفاده بشه؟
تشکر
بله فانکشن زیر لازم نیست و الکی اجرا میشه(بود و نبودش سودی نداره)
);
$clear_text = html_entity_decode($clear_text);
نال رو چون نمیخواسته از هیچ flags استفاده کنه و قصد ست کردن کارکتر ست داشته اورده که تابع اتربیوت هاشو بشانسه با اینکه نیازی هم نبود استفاده کنه
به دلیل اینکه لاین زیر تمام Entity ها را پاک میکند :
شاید برای مورد اولی هدفش پاک کردن فاصله ها بوده
چون در صورت عدم وجود در انتها فانکشن با رشته عبارت nbsp; رو همراه با رشته برمیگردوند
mehran-b
August 13th, 2017, 01:53
شاید برای مورد اولی هدفش پاک کردن فاصله ها بوده
چون در صورت عدم وجود در انتها فانکشن با رشته عبارت nbsp; رو همراه با رشته برمیگردوند
بله. نیم فاصله و فاصله رو تبدیل کرده به فاصله و بقیه Entity رو حذف کرده.
ولی من بارم نفهمیدم در htmlentities وقتی flags رو null گذاشته یعنی تابع بدون flags کار میکنه و اروری نمیده یا نه چون flag دیفالت یعنی ENT_COMPAT | ENT_HTML401 رو استفاده میکنه اروری نمیده؟
starting
August 13th, 2017, 02:07
بله. نیم فاصله و فاصله رو تبدیل کرده به فاصله و بقیه Entity رو حذف کرده.
ولی من بارم نفهمیدم در htmlentities وقتی flags رو null گذاشته یعنی تابع بدون flags کار میکنه و اروری نمیده یا نه چون flag دیفالت یعنی ENT_COMPAT | ENT_HTML401 رو استفاده میکنه اروری نمیده؟
ببینید هر تابع ورودی ها رو براساس ترتیب خودش میگیره
ایشون میخواسته استرینگ رو بده و از کارکتر ست هم استفاده کنه پس یا باید اتربیوت دوم رو تال بزاره
پیشنهاد میدم از phpstorm بعنوان ادیتور در کد نویسی استفاده کنید
mehran-b
August 13th, 2017, 02:15
ببینید هر تابع ورودی ها رو براساس ترتیب خودش میگیره
ایشون میخواسته استرینگ رو بده و از کارکتر ست هم استفاده کنه پس یا باید اتربیوت دوم رو تال بزاره
پیشنهاد میدم از phpstorm بعنوان ادیتور در کد نویسی استفاده کنید
بله در این حد متوجه هستم. ولی وقتی که بخوان یه آرگومان رو رد کنن جاش null نمیذارن معمولا مقدار دیفالت رو قرار میدن.
الان می میخوام بدون این کد
htmlentities($str, null, 'UTF-8');
str ورودی رو با چه flag ای خروجی میده؟
تشکر بابت تامل
T.Toosi
August 13th, 2017, 02:25
شاید برای مورد اولی هدفش پاک کردن فاصله ها بوده
چون در صورت عدم وجود در انتها فانکشن با رشته عبارت nbsp; رو همراه با رشته برمیگردوند
ورودی تابع رشته است بدون entity name، داخل تابع توسط متد htmlentities کارکتر هامون به entity تبدیل خواهد شد، اما اگر در ورودی تابع ارسال کنید به مشکل میخورد و nbsp; برگشت میدهد (به صورت خلاصه اگر ورودی تابع مستقیم بنویسیم خروجی nbsp; خواهد آمد)
نکته ی دیگری که هست در فلگ دیفالت (ENT_HTML401) این متد از کارکتر non breaking space یا همون پشتیبانی نمی کند، پس اگر ورودی تابع بالای ما non breaking space داشته باشد، متد htmlentities همون کارکتر فاصله را نمایش میدهد و نه و حتی ‌ هم پشتیبانی نمیکند (کلا 4 تا کارکتر فلگ دیفالت پشتیبانی میکند که در پایین لیست کردم) برای همین کلا این لاین اضافه و بدون کاربرد است مگر اینکه فلگ را عوض کنیم.
بله. نیم فاصله و فاصله رو تبدیل کرده به فاصله و بقیه Entity رو حذف کرده.
درست است، فاصله ها را تبدیل کرده است، اگر نباشد و چند جمله باشد بهم میچسبند.
ولی من بارم نفهمیدم در htmlentities وقتی flags رو null گذاشته یعنی تابع بدون flags کار میکنه و اروری نمیده یا نه چون flag دیفالت یعنی ENT_COMPAT | ENT_HTML401 رو استفاده میکنه اروری نمیده؟
این پارامتر اختیاری است، حالا اگر میخواهید ببینید اگر مقدار null بزاریم چه کارکتر هایی را این فلگ پشتیبانی میکند به صورت زیر عمل کنید : (null هم بزارید باز از ENT_HTML401 استفاده خواهد کرد)
میبینید این فلگ 252 تا کارکتر را پشتیبانی و تبدیل میکند، پس اول ببینید رشته ورودی این تابع شما چه Handle ای نیاز دارد و فلگ مناسب با آن را انتخاب کنید.