За последние 24 часа нас посетили 59187 программистов и 1811 роботов. Сейчас ищут 943 программиста ...

preg_match не хочешь выводить

Тема в разделе "PHP для новичков", создана пользователем hust0, 22 апр 2016.

  1. hust0

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

    С нами с:
    6 июл 2013
    Сообщения:
    321
    Симпатии:
    8
    Здравствуйте, не могу понять почему preg_match не хочет выводить слово со знаком () ?

    PHP:
    1. $id= "123456fsdf5(KK)";
    2. $text="123456fsdf5(KK)";
    3.  
    4. preg_match("/".$id."/i",$text,$out);
    5.  
    6. echo "<pre>";
    7. print_r($out);
    8. echo "</pre>";
     
  2. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    PHP:
    1. $id="123456fsdf5\(KK\)";
     
  3. hust0

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

    С нами с:
    6 июл 2013
    Сообщения:
    321
    Симпатии:
    8
    допустим я сделал так

    PHP:
    1. $ido = urlencode($_GET['id']);  
    где $_GET['id'] равен 123456fsdf5(KK) или 123456fsdf5+(KK)

    то выведет 123456fsdf5(KK) или 123456fsdf5+(KK)

    но когда делаю так

    PHP:
    1. if (preg_match("/".$ido."/i", $ifID)) {
    2. echo $ido;
    3. }
    то не хочет выводить... такое ощущение что preg_match не воспринимает знаки плюс и скобки :(
     
  4. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
  5. hust0

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

    С нами с:
    6 июл 2013
    Сообщения:
    321
    Симпатии:
    8
    Как мне правильно написать? можете помочь?
     
  6. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    $ido обверни в preg_quote и к i добавь u
     
    hust0 нравится это.
  7. hust0

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

    С нами с:
    6 июл 2013
    Сообщения:
    321
    Симпатии:
    8
    так?

    PHP:
    1. if(preg_match("/".preg_quote($ido)."/iu",$ifID)){
    2. echo $ido;
    3. }
    --- Добавлено ---
    Получилось спасибо большое.
    --- Добавлено ---
    не выводит со скобками (
    --- Добавлено ---
    получается скобки заменяются на %28
    --- Добавлено ---
    если убираю urlencode то знаки + пропадают
    --- Добавлено ---
    PHP:
    1. $ss = preg_replace ("/" . preg_quote($ido) . "/iu", $ido, $ifID);
    2.         echo $ss."<br>";
    сделал как сказали, но почему то у меня выводит все данные, а должно выводить по запросу слова.
     
  8. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Можно пример кода который я смогу запустить
     
  9. hust0

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

    С нами с:
    6 июл 2013
    Сообщения:
    321
    Симпатии:
    8
    PHP:
    1. if ( $_GET['id']) {
    2. $f = fopen("https://site.com/file.csv", "r") or die("<center>error</center>");
    3.  
    4. $ido = $_GET['id'];
    5.  
    6. for($i=0; $datsa=fgetcsv($f,1000,";"); $i++) {
    7.    
    8.    
    9.    
    10.         $ifID = $datsa[1];
    11.         if (preg_replace ("/" . preg_quote($ido) . "/iu", $ido, $ifID)) {
    12.            echo $datsa[2];
    13. }
    14. }
    должен вывести только 1 раз, а он выводит все данные с опред. столбика.
    --- Добавлено ---
    точнее первую часть
    --- Добавлено ---
    получается что делаю запрос 5103819_CZ+AM

    $ido = $_GET['id'];

    выводит 5103819_CZ AM без плюса.
    --- Добавлено ---
    через GET я запрашиваю код и csv файла ( 2 столбик там все коды - ссылку дал).

    допустим index.php?id= здесь код из csv

    фишка в том что код не видит плюсы, т.к. некоторые коды имею знак плюс ( формат 5103718_CZ+AM+PE), а скобки видит.

    PHP:
    1. if ( $_GET['id']) {
    2. $f = fopen("https://site.com/file.csv", "r") or die("<center>error</center>");
    3.  
    4. $ido = $_GET['id'];
    5.  
    6. for($i=0; $datsa=fgetcsv($f,1000,";"); $i++) {
    7.  
    8.  
    9.  
    10.         $ifID = $datsa[1];
    11.         if (preg_replace ("/" . preg_quote($ido) . "/iu", $ido, $ifID)) {
    12.            echo $datsa[2];
    13. }
    14. }
    делал urlencode но тут замкнутый круг...
     
    #9 hust0, 22 апр 2016
    Последнее редактирование модератором: 23 апр 2016
  10. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    Уточни что находится в переменной $ido когда передаешь тот параметр
     
  11. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    как ты формируешь эту ссылку?
     
  12. hust0

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

    С нами с:
    6 июл 2013
    Сообщения:
    321
    Симпатии:
    8
    $ido = urlencode($_GET['id']); то будут плюсы остаются, при передачи переменной 5103649_CZ+PE

    НО

    при передачи переменной 5101306(RW) скобки превращаются в %28, %29

    а если без urlencode то плюсы не отображаются а скобки работают...
    --- Добавлено ---
    сделал отдельный скрипт, который выводит все картинки по спец. критериям и к каждой картинке привязана ссылка где в конце ?id= код который так же берется из csv файла.
     
  13. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    PHP:
    1. <?php
    2.  
    3. $data = array('id'=>'5103819_CZ+AM');
    4.  
    5. echo '<a href="?'.http_build_query($data).'">test</a><br>';
    6.  
    7. if (empty($_GET['id']) === false) {
    8.  
    9.     $mystring = 'abc тест 5103819_CZ+AM abc тест2';
    10.     $findme   = $_GET['id'];
    11.    
    12.     $pos = strpos($mystring, $findme);
    13.  
    14.     // Оператор !== также можно использовать.  Использование != не даст верного
    15.     // результата, так как 'a' находится в нулевой позиции. Выражение (0 != false) приводится
    16.     // к false.
    17.     if ($pos !== false) {
    18.          echo "Строка '$findme' найдена в строке '$mystring'";
    19.              echo " в позиции $pos";
    20.     } else {
    21.          echo "Строка '$findme' не найдена в строке '$mystring'";
    22.     }
    23.  
    24. }
    25.  
    26. ?>
     
  14. hust0

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

    С нами с:
    6 июл 2013
    Сообщения:
    321
    Симпатии:
    8
    а что насчет if (preg_match("/". preg_quote($ido)."/i", $ifID)) { ?
     
  15. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    @hust0 зачем он тебе? ты регулярное выражение хочешь составить?
     
  16. hust0

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

    С нами с:
    6 июл 2013
    Сообщения:
    321
    Симпатии:
    8
    PHP:
    1. for($i=0; $datsa=fgetcsv($f,1000,";"); $i++) {
    берет все коды из 2-ого столбика

    и

    PHP:
    1.  if (preg_match("/". preg_quote($ido)."/i", $ifID)) {
    находит заданный код по GET
     
  17. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    PHP:
    1. <?php
    2. $data = array('id'=>'5103819_CZ+AM()');
    3.  
    4. echo '<a href="?'.http_build_query($data).'">test</a><br>';
    5.  
    6. if (empty($_GET['id']) === false) {
    7.  
    8.     $mystring = 'abc тест 5103819_CZ+AM() abc тест2';
    9.     $findme   = $_GET['id'];
    10.    
    11.     if (preg_match("/". preg_quote($findme)."/iu", $mystring, $matches)) {
    12.         var_export($matches);
    13.     }
    14.  
    15. }
     
  18. hust0

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

    С нами с:
    6 июл 2013
    Сообщения:
    321
    Симпатии:
    8
    а как это будет брать код из csv файла?
     
  19. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    главное что работает, подставь свои переменные
     
  20. hust0

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

    С нами с:
    6 июл 2013
    Сообщения:
    321
    Симпатии:
    8
    подставил код 5103819_CZ+TZLB и плюсик меняется на %2
    --- Добавлено ---
    решил проблему более проще


    PHP:
    1.  $ido = str_replace(" ", "+", $_GET['id']);