Здравствуйте, не могу понять почему preg_match не хочет выводить слово со знаком () ? PHP: $id= "123456fsdf5(KK)"; $text="123456fsdf5(KK)"; preg_match("/".$id."/i",$text,$out); echo "<pre>"; print_r($out); echo "</pre>";
допустим я сделал так PHP: $ido = urlencode($_GET['id']); где $_GET['id'] равен 123456fsdf5(KK) или 123456fsdf5+(KK) то выведет 123456fsdf5(KK) или 123456fsdf5+(KK) но когда делаю так PHP: if (preg_match("/".$ido."/i", $ifID)) { echo $ido; } то не хочет выводить... такое ощущение что preg_match не воспринимает знаки плюс и скобки
так? PHP: if(preg_match("/".preg_quote($ido)."/iu",$ifID)){ echo $ido; } --- Добавлено --- Получилось спасибо большое. --- Добавлено --- не выводит со скобками ( --- Добавлено --- получается скобки заменяются на %28 --- Добавлено --- если убираю urlencode то знаки + пропадают --- Добавлено --- PHP: $ss = preg_replace ("/" . preg_quote($ido) . "/iu", $ido, $ifID); echo $ss."<br>"; сделал как сказали, но почему то у меня выводит все данные, а должно выводить по запросу слова.
PHP: if ( $_GET['id']) { $f = fopen("https://site.com/file.csv", "r") or die("<center>error</center>"); $ido = $_GET['id']; for($i=0; $datsa=fgetcsv($f,1000,";"); $i++) { $ifID = $datsa[1]; if (preg_replace ("/" . preg_quote($ido) . "/iu", $ido, $ifID)) { echo $datsa[2]; } } должен вывести только 1 раз, а он выводит все данные с опред. столбика. --- Добавлено --- точнее первую часть --- Добавлено --- получается что делаю запрос 5103819_CZ+AM $ido = $_GET['id']; выводит 5103819_CZ AM без плюса. --- Добавлено --- через GET я запрашиваю код и csv файла ( 2 столбик там все коды - ссылку дал). допустим index.php?id= здесь код из csv фишка в том что код не видит плюсы, т.к. некоторые коды имею знак плюс ( формат 5103718_CZ+AM+PE), а скобки видит. PHP: if ( $_GET['id']) { $f = fopen("https://site.com/file.csv", "r") or die("<center>error</center>"); $ido = $_GET['id']; for($i=0; $datsa=fgetcsv($f,1000,";"); $i++) { $ifID = $datsa[1]; if (preg_replace ("/" . preg_quote($ido) . "/iu", $ido, $ifID)) { echo $datsa[2]; } } делал urlencode но тут замкнутый круг...
$ido = urlencode($_GET['id']); то будут плюсы остаются, при передачи переменной 5103649_CZ+PE НО при передачи переменной 5101306(RW) скобки превращаются в %28, %29 а если без urlencode то плюсы не отображаются а скобки работают... --- Добавлено --- сделал отдельный скрипт, который выводит все картинки по спец. критериям и к каждой картинке привязана ссылка где в конце ?id= код который так же берется из csv файла.
PHP: <?php $data = array('id'=>'5103819_CZ+AM'); echo '<a href="?'.http_build_query($data).'">test</a><br>'; if (empty($_GET['id']) === false) { $mystring = 'abc тест 5103819_CZ+AM abc тест2'; $findme = $_GET['id']; $pos = strpos($mystring, $findme); // Оператор !== также можно использовать. Использование != не даст верного // результата, так как 'a' находится в нулевой позиции. Выражение (0 != false) приводится // к false. if ($pos !== false) { echo "Строка '$findme' найдена в строке '$mystring'"; echo " в позиции $pos"; } else { echo "Строка '$findme' не найдена в строке '$mystring'"; } } ?>
PHP: for($i=0; $datsa=fgetcsv($f,1000,";"); $i++) { берет все коды из 2-ого столбика и PHP: if (preg_match("/". preg_quote($ido)."/i", $ifID)) { находит заданный код по GET
PHP: <?php $data = array('id'=>'5103819_CZ+AM()'); echo '<a href="?'.http_build_query($data).'">test</a><br>'; if (empty($_GET['id']) === false) { $mystring = 'abc тест 5103819_CZ+AM() abc тест2'; $findme = $_GET['id']; if (preg_match("/". preg_quote($findme)."/iu", $mystring, $matches)) { var_export($matches); } }
подставил код 5103819_CZ+TZLB и плюсик меняется на %2 --- Добавлено --- решил проблему более проще PHP: $ido = str_replace(" ", "+", $_GET['id']);