За последние 24 часа нас посетили 64707 программистов и 1747 роботов. Сейчас ищут 898 программистов ...

Форматирование текста

Тема в разделе "PHP для новичков", создана пользователем Bueno, 29 апр 2008.

  1. Bueno

    Bueno Активный пользователь

    С нами с:
    30 окт 2007
    Сообщения:
    73
    Симпатии:
    0
    Адрес:
    Riga, Latvia
    Не получается сделать такой вариант обработки текста:

    У меня в базе сохранено описание для товара, в таком формате:

    Name: Mustek ScanEx. 1248UB /USB/600x1200/48bit/CIS bus
    Type : Color Flatbed , Single Pass
    Selectable resolution : 19200 dpi x 19200 dpi
    Optical resolution : 600 dpi (H) x 1200 dpi (V)
    Power supply: USB Powered
    Weight: 2,85 Kg
    Dimensions: 414 x 269 x 52 mm (L x W x H)
    Interface: USB 1.1 for PC and Mac
    OS requirement: Supports Microsoft Windows 98se , Me , 2000 , XP and MacOS MacOS 8.x, 9.x, X Classic Mode

    Я хотел сделать обработку этого описания таким образом, чтобы к примеру получилось так:

    HTML:
    1. <b>Name</b><br>Mustek ScanEx. 1248UB /USB/600x1200/48bit/CIS bus<br><br>
    2. <b>Type</b><br>Color Flatbed , Single Pass <br><br>
    3. e.t.c.
    Пробовал делать через preg_replace - Ничего не вышло.

    Помогите решить эту задачу...

    Спасибо.
     
  2. armadillo

    armadillo Активный пользователь

    С нами с:
    6 апр 2007
    Сообщения:
    2.380
    Симпатии:
    0
    Адрес:
    Russia, Moscow
    верим три раза. Щазз.


    $out=str_replace($names[$i],"<br /><br /><b>".$names[$i]."</b>",$out);
     
  3. Bueno

    Bueno Активный пользователь

    С нами с:
    30 окт 2007
    Сообщения:
    73
    Симпатии:
    0
    Адрес:
    Riga, Latvia
    Я возможно неправильно указал вариант хранения текста в базе:

    $mysql_Text = "Name: Mustek ScanEx. 1248UB /USB/600x1200/48bit/CIS bus
    Type : Color Flatbed , Single Pass
    Selectable resolution : 19200 dpi x 19200 dpi
    Optical resolution : 600 dpi (H) x 1200 dpi (V)
    Power supply: USB Powered
    Weight: 2,85 Kg
    Dimensions: 414 x 269 x 52 mm (L x W x H)
    Interface: USB 1.1 for PC and Mac
    OS requirement: Supports Microsoft Windows 98se , Me , 2000 , XP and MacOS MacOS 8.x, 9.x, X Classic Mode";
     
  4. nws

    nws Активный пользователь

    С нами с:
    21 авг 2007
    Сообщения:
    48
    Симпатии:
    0
    PHP:
    1. <?
    2.  
    3. //connect to DB
    4.  
    5. $q = mysql_query("SELECT * FROM table");
    6.  
    7. while ($row = mysql_fetch_object($q)){
    8.     echo "Type : $row->type<br>";
    9.     echo "Selectable resolution : $row->Selectable resolution<br>";
    10.     ....
    11.    
    12.  
    13. }
    14.  
    15. ?>
     
  5. Bueno

    Bueno Активный пользователь

    С нами с:
    30 окт 2007
    Сообщения:
    73
    Симпатии:
    0
    Адрес:
    Riga, Latvia
    Спасибо за ответы! Но есть одна проблема: Я неправильно задал вопрос, sorryy...

    Уберём базу из первого вопроса.

    Есть переменная которая содержит в себе текст описания товара, текст идёт скопом т.е. полностью всё описание записано в переменную, к примеру таких переменных много и всё в себе содержат разное описание, к примеру:

    $text = "Name: Sony
    Model: DG54";

    или

    $text2 = "Type: modem
    wight: 14g
    size: 12m
    e.tc. ";

    И мне надо сделать обработчик для того текста который находится в переменной, который бы отделял названия до двоеточия и параметры после двоеточия.

    $text = "name1: par1
    name2: par2
    name3: par3
    name4: par4
    name5: par5
    name6: par6
    name7: par7";

    $out = "<b>name1</b>par1<br><br> <b>name2</b>par2<br><br> <b>name3</b>par3<br><br> e.t.c.";
     
  6. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    Контент надо грабить с умом!
     
  7. Bueno

    Bueno Активный пользователь

    С нами с:
    30 окт 2007
    Сообщения:
    73
    Симпатии:
    0
    Адрес:
    Riga, Latvia
    Ну почему же грабить, мне компания сама предоставляет эту информацию и я её записываю в базу, просто хочется сделать красивый вывод данных о товаре.
     
  8. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    Bueno
    Чтобы расставить <br>, прогоните текст через функцию nl2br(), а для расстановки <b> регулярка - preg_replace('~<br>(.*?):~', '<br><b>$1:</b>', $text); В случае, если текст в таком виде, как Вы написали.
     
  9. Johnatan

    Johnatan Активный пользователь

    С нами с:
    6 мар 2008
    Сообщения:
    508
    Симпатии:
    0
    Адрес:
    Испания
    Сделал вот так, хотя это скорее всего неправильно.. :)))

    PHP:
    1. $text = explode("\n",$text);
    2. for ($i = 0; $i < count($text); $i++) {
    3. $text[$i] = "<b>".$text[$i];
    4. $text[$i] = str_replace(":","</b>:",$text[$i]);
    5. $text[$i] .= "<br /><br />";
    6. }
    7. $text = implode("\n",$text);
    8.  
    Но тоже работает.. :)))))))

    А вот ещё неправильный, но рабочий вариант.. :))))

    PHP:
    1. $text = "<b>".$text;
    2. $text = str_replace("\n","\n<b>",$text);
    3. $text = str_replace(":","</b>:",$text);
    4. $text = str_replace("\n","<br /><br />\n",$text);
     
  10. +Sten+

    +Sten+ Активный пользователь

    С нами с:
    27 авг 2007
    Сообщения:
    978
    Симпатии:
    0
    Раз уж на то пошло:
    PHP:
    1.  
    2. $lines = explode("\r\n", $text);
    3. $text = '';
    4. foreach($lines as $value) {
    5.   $text2 = explode(':', $value);
    6.   $text .= "<b>$text2[0]</b> $text2[1] <br><br>\r\n";
    7. }
    8.  
     
  11. Bueno

    Bueno Активный пользователь

    С нами с:
    30 окт 2007
    Сообщения:
    73
    Симпатии:
    0
    Адрес:
    Riga, Latvia
    Спасибо! Теперь всё в норме :)
     
  12. Bueno

    Bueno Активный пользователь

    С нами с:
    30 окт 2007
    Сообщения:
    73
    Симпатии:
    0
    Адрес:
    Riga, Latvia
    Всем привет! Всё работает замечательно, но я не учёл одну вещь в некоторых описаниях в одной строчке иногда проскакивают несколько двоеточий. Можно как то сделать чтобы скрипт в каждой строке использовал только первые двоеточия а остальные пропускал или заменял на что то? Использую этот вариант:

    PHP:
    1.  $lines = explode("\r\n", $text);
    2.  $text = '';
    3.  foreach($lines as $value) {
    4.    $text2 = explode(':', $value);
    5.    $text .= "<b>$text2[0]</b> $text2[1] <br><br>\r\n";
    6.  }