السلام عليكم
كود:< p s t y l e = " o n e " > o n e t w o t h r e e < / p >
كيف اقدر الغي المسافات اللي داخل الاقوس <> بإستخدام preg_replace
مع ملاحظة ترك مسافة بعد معرف الوسم
بحيث يطلع
كود:<p style="one">o n e t w o t h r e e</p>
السلام عليكم
كود:< p s t y l e = " o n e " > o n e t w o t h r e e < / p >
كيف اقدر الغي المسافات اللي داخل الاقوس <> بإستخدام preg_replace
مع ملاحظة ترك مسافة بعد معرف الوسم
بحيث يطلع
كود:<p style="one">o n e t w o t h r e e</p>
الرفع للضرورة
بس للاسف مابتنفعش لو كان فيه مسافات بين اسم الستايلكود PHP:
$string='< p s t y l e = " two" > o n e t w o t h r e e < / p >';
$new = preg_replace('%< p s t y l e = "([\s\w]+)" >(.*)< / p >%iU','<p style="$1">$2</p>',$string);
echo htmlentities($new);
//OUTPUT: <p style=" two"> o n e t w o t h r e e </p>
< p s t y l e = " o n e "
لازم تكون
< p s t y l e = " one "
حاولت استخدم
بس طلعت المسافات اللي قبل الكلمة وبعدها مش اللي في النصف بين الحروفكود PHP:
$new = preg_replace('%< p s t y l e = "([\s\w]+)" >(.*)< / p >%iUe',"'<p style=\"'.str_replace(' ','c',$1).'\">$2</p>'",$string);
//OUTPUT: <p style="two"> o n e t w o t h r e e </p>
// لاحظ عدم وجود مسافات قبل كلمة two او بعدها
+ اوجه التقصير الأخري :
1 - إذا كان هناك تغيير في عدد المسافات في p s t y l e , يعني مثلا هناك مسافتين بدل واحده بين كل حرف , لن تصلح الا إذا استخدمت \s* بين كل حرف والاخر
2 - REGEX بطيئة وتستهلك موارد السيرفر
جاري عمل محاولات اخري
التعديل الأخير تم بواسطة Aloha ; 19-09-2008 الساعة 10:20 PM
__________________
وفوق كل ذي علم عليم !..
حبيب قلبي اللي فوق مجرد مثال , قصدي بشكل عام وبكل بساطه كيف اقدر الغي المسافات "المفردة" اللي داخل الاقواس
المشكلة اننا لازم نحافظ علي سلامه كود ال HTML
يعني لو لغينا المسافات من
ستصبحكود:< p s t y l e = " o n e " > o n e t w o t h r e e < / p >
وسنكتفي بإستخدام str_replaceكود:<pstyle="one">onetwothree</p>
ولكننا نريدها
كود:<p style="one"> o n e t w o t h r e e </p
__________________
وفوق كل ذي علم عليم !..
راجع بعد ساعتين ان شاء الله
__________________
وفوق كل ذي علم عليم !..
تستطيع عملها ايضا عن طريق الدالة implode او الدالة join
__________________
قل اللهم مالك المُلك تؤتي الملك من تشاء وتنزع الملك ممن تشاء وتعز من تشاء وتذل من تشاء بيدك الخير انك على كل شىء قدير
aloha اشكر لك مساعدتك وأنا بالإنتظار
انت ذكرت نقطه ان اذا حذفنا المسافات راح يكون الوسم غير مقروء , لكن نقدر نعدي هالمشكلة بحذف المسافات المفردة بين الاحرف والمسافة بين الـ p و style عبارة عن ثلاث مسافات تقريباً
ها يامبرمجين الهمه الهمه من يحلها
هذا حل مؤقت , مع انه يقوم بالمطلوب تماما كما طلبت انت , ولكني متأكد انه بطئ وغير منظم نوعا ما ,, ولكنه يقوم بالمهمه وخلاص
طبعا لن يعمل الا مع P style و حليت مشكلة المسافات الغير متساوية بوضع \s*كود PHP:
$string='< p s t y l e = " t h re e " > o n e t w o t h r e e < / p > < p s t y l e = " o n e " > o n e t w o t h r e e < / p >';;
$new = preg_replace('%(<\s*p\s*s\s*t\s*y\s*l\s*e\s*=\s*"[a-zA-Z ]+"\s*>)(.*)(<\s*/\s*p\s*>)%iUes',"str_replace(' ','','\\1').'\\2'.str_replace(' ','','\\3')",$string);
$new = stripslashes($new);
$new = str_ireplace('psty','p sty',$new);
echo htmlentities($new);
// سيصبح الناتج
// <p style="three"> o n e t w o t h r e e </p> <p style="one"> o n e t w o t h r e e </p>
التعديل الأخير تم بواسطة Aloha ; 20-09-2008 الساعة 03:18 PM
__________________
وفوق كل ذي علم عليم !..
صغرّت الكود شوية 20 حرف : )
بس لو فيه مشكلة ارجع للقديمكود PHP:
$string='< p s t y l e = " t h re e " > o n e t w o t h r e e < / p > < p s t y l e = " o n e " > o n e t w o t h r e e < / p >';
$new = preg_replace('%(<[pstyle= ]*"[a-zA-Z ]+"\s*>)(.*)(<\s*/\s*p\s*>)%iUes',"str_replace(' ','','\\1').'\\2'.str_replace(' ','','\\3')",$string);
$new = stripslashes($new);
$new = str_ireplace('psty','p sty',$new);
echo htmlentities($new);
//OUTPUT: <p style=" two"> o n e t w o t h r e e </p>
// [pstyle= ]*
// بدلا من
//\s*p\s*s\s*t\s*y\s*l\s*e\s*=\s*
التعديل الأخير تم بواسطة Aloha ; 20-09-2008 الساعة 03:31 PM
__________________
وفوق كل ذي علم عليم !..
يعطيك الف عافية
تصدق انك بحلك هذا عطيتني فكرة حل تشتغل على اي نوع من الأوسمة بدون مشاكل
أو وش رايك نفصلها في فانكشن خارجي تتوقع تكون اسرع يعني بالطريقةكود:$chars = '< p s t y l e = " o n e " > o n e t w o t h r e e < / p >'; $chars = preg_replace('/<(.*)>/Ues',"'<'.str_replace(' ','-',\"\\1\").'>'",$chars); $chars = preg_replace('/<(.*)>/Ues',"'<'.str_replace(' ','',\"\\1\").'>'",$chars); $chars = preg_replace('/<(.*)>/Ues',"'<'.str_replace('-',' ',\"\\1\").'>'",$chars);
ها وش رايك وش اعتمد اي الطريقتين ؟كود:function deletspace($a){ $chars = str_replace(' ','-',"$a"); $chars = str_replace(' ','',"$chars"); $chars = str_replace('-',' ',"$chars"); return $code; } $chars = '< p s t y l e = " o n e " > o n e t w o t h r e e < / p >'; $chars = preg_replace('/<(.*)>/Ues',"'<'.deletspace(\"\\1\").'>'",$chars);
الفانكشن طبعا لو العملية دي هتتكرر أكتر من مرة
وممكن تستخدم PHP: preg_replace_callback - Manual
__________________
وفوق كل ذي علم عليم !..
ماراح تتكرر
لكن str_replace اسرع من preg_replace فأعتقد ان طريقة الفنكشن افضل
الصراحة انا مش فاهم الحل بتاعك , بس عرفت انك عايز تسيب المسافتين فبتحولها الي - لتحفظ وبعدين تشيل المسافه وترجع ال - تاني لمسافه واحده
كان ممكن تستخدم
للمسافة الواحدهكود PHP:
/s
و تستخدم
لمسافتين او اكثركود PHP:
/s/s+
ملحوظة : في الكود اللي فوق استخدمت / بدل \ عشان مابيظهرش اما اجي اكتبه مش عارف ليه بس المفروض نستخدم \.. باينهم مستخدمين stripslashes هنا ولا ايه
التعديل الأخير تم بواسطة Aloha ; 20-09-2008 الساعة 10:12 PM
__________________
وفوق كل ذي علم عليم !..
يعطيك العافية على اهتمامك
عندي سؤال ثاني يبيله فهم دسم للتعابير القياسية
كيف اقدر الغي الوسوم المتكررة مثلاًإلىكود PHP:
<font color="#FFFFFF"><font color="#FF0000">swalif</font><p><font color="#000080">soft</font></font>
كود PHP:
<font color="#FFFFFF">swalif<p>soft</font>