PDA

View Full Version : گفتگو: تغییر دو رشته مشابه در php



shz_furion
دوشنبه 29 مهر 1392, 20:05 عصر
سلام.من یه متن رو با file_get_contents از یه صفحه دریافت کردم،حالا نیاز دارم که استایلش رو تغییر بدم اما دو تا کلاس داره با نام های مثلا roooz که هر کدوم حتما باید استایل خودش رو داشته باشه.
مثلا اسم یکیش رو roooz1 گذاشت، و اون یکی roooz2 تا بشه استایل css بهش داد.
با php میشه این کار رو کرد.اما نمیدونم چطوری.
کسی کدی داره که بشه این کار رو کرد؟

mahmod2000
دوشنبه 29 مهر 1392, 20:18 عصر
میتونید از کلاس sample_html_dom استفاده کنید
به این سایت سر بزنید
http://simplehtmldom.sourceforge.net/

shz_furion
دوشنبه 29 مهر 1392, 20:27 عصر
سلام.ممنون.به من این روش رو گفته بودند.
این کدی که از این صفحه شما پیشنهاد کردید،تو لوکال و تو هاست مشکل داره.
میشه یه کد بدید که این رو درست کنم؟
خیلی ضروری هست و عجله دارم.

MMSHFE
دوشنبه 29 مهر 1392, 21:07 عصر
لطفاً درخواستتون رو با مثال، بیشتر توضیح بدین تا ببینیم چه راهی میشه پیدا کرد.

mahmod2000
دوشنبه 29 مهر 1392, 21:10 عصر
دوست عزیز شما قواعدش رو بخونید
و اینکه روی لوکال مشکلی نداره
و اینکه، اونجوری که من از گفته شما متوجه شدم:
شما وقتی متنی رو میگیرید و میگید که خودش کلاس داره
میتونید یک فایل css درست کنید و به نام همون کلاس ها استایل بزنید واسش و در صفحه ای که میخواید فایل css رو فراخوانی کنید تا استایل ها اعمال بشن

shz_furion
دوشنبه 29 مهر 1392, 21:23 عصر
ببینید.من مجبورم خودم به دلایلی استایل رو تغییر بدم و هیچ راهی نداره مگر اینکه کلاس ها رو دو تا کنم.هیچ راهی نداره.اگه میشد که تایپیک نمیزدم.شما گفتید توی لوکال مشکلی نداره.ببینید هم مشکل با file_get_html داره که من اونو به file_get_contents تغییر دادم.اما باز با تابع find مشکل پیدا کرد.میشه راهنماییم کنید؟
در مورد شما که منظورم رو نفهمیدید:
ببین.چند تا تگ div هست.مثالش به این صورت:


<<div class="odd">توضیحات</div>
<div class="even">توضیحات</div>
<div class="odd">توضیحات</div>
<div class="even">توضیحات</div>
<div class="odd">توضیحات</div>
<div class="even">توضیحات</div>
<div class="roooz"></div>
<div class="roooz"></div>
<div class="odd">توضیحات</div>
<div class="even">توضیحات</div>



حالا من میخوام به صورت یکی در میون همون کلاس ها باشه.کلاس roooz به هم ریختتش.با css تقریبا من تونستم که تا حدی مشکلات رو حل کنم.منظورم first-child و last-child و... که در css3 هست.اما آخر یه جا گیر افتادم و دیگه امکان نداره با این روش این دو کلاس رو بهشون کلاس های جداگونه تعریف کنم.

MMSHFE
دوشنبه 29 مهر 1392, 22:01 عصر
الآن میخواین roooz اولی بشه odd و roooz دومی بشه even ؟

shz_furion
دوشنبه 29 مهر 1392, 22:14 عصر
آره.یعنی به صورت تناوبی کلاس ها تکرار بشند.
خب اگه بشه اولی رو roooz1 و دومی رو roooz2 کرد،میشه با str_replace،کلاس roooz1 رو به odd و roooz2 رو به even تغییر داد.
مهم تغییر اسم این دو کلاس هست.بقیه رو خودم بلدم.
راهی سراغ دارید؟

MMSHFE
دوشنبه 29 مهر 1392, 22:25 عصر
اینو ببینید:


$html = <<<EOT
<div class="odd">توضیحات</div>
<div class="even">توضیحات</div>
<div class="odd">توضیحات</div>
<div class="even">توضیحات</div>
<div class="odd">توضیحات</div>
<div class="even">توضیحات</div>
<div class="roooz"></div>
<div class="roooz"></div>
<div class="odd">توضیحات</div>
<div class="even">توضیحات</div>
EOT;

$class = 'odd';
while(($pos = mb_strpos($html, 'roooz', 0, 'utf-8')) !== false) {
$html = mb_substr($html, 0, $pos, 'utf-8') . $class . mb_substr($html, $pos + 5, mb_strlen($html, 'utf-8'), 'utf-8');
$class = ($class == 'odd' ? 'even' : 'odd');
}

echo $html;
/* Output:
<div class="odd">توضیحات</div>
<div class="even">توضیحات</div>
<div class="odd">توضیحات</div>
<div class="even">توضیحات</div>
<div class="odd">توضیحات</div>
<div class="even">توضیحات</div>
<div class="odd"></div>
<div class="even"></div>
<div class="odd">توضیحات</div>
<div class="even">توضیحات</div>
*/

shz_furion
سه شنبه 30 مهر 1392, 09:49 صبح
سلام.واقعا ممنونم.درست شد کارم.
فقط یه سوال داشتم.میشه توضیح بدید چیکار کردید؟میخوام یاد بگیرم.

MMSHFE
سه شنبه 30 مهر 1392, 10:13 صبح
ببینید، اول یک متغیر تعریف شده به اسم class$ که مقدارش هم odd هست. بعد یه حلقه درست کردم و گفتم تا وقتی که توی رشته، کلمه roooz پیدا میشه، این حلقه باید تکرار بشه. داخل حلقه هم هربار، از ابتدای رشته تا اول کلمه roooz جدا میشه، بعدش class$ نوشته میشه و بعد باز در ادامه، بقیه رشته (بعد از کلمه roooz) قرار میگیره و توی خود رشته ذخیره میشه. class$ هم هربار مقدارش چک میشه اگه odd بود، میشه even و درغیر اینصورت دوباره میشه odd - ضمناً دکمه تشکر کاربرد قشنگتری داره. موفق باشید.

shz_furion
سه شنبه 30 مهر 1392, 10:27 صبح
آره.یادم نبود :تشویق: