Экранирование «.» в preg_replace

#php #preg-replace

#php #preg-заменить

Вопрос:

Что я делаю не так?

 <?php 
    $imageurl = $pagename1; 
    $imageurl = preg_replace('/.asp/', .$g_sites_img2.'.jpg', $pagename1);
?>
  

Я пытаюсь экранировать . в preg_replace .

Я также пытался:

 <?php
    $imageurl = $pagename1;
    $imageurl = preg_replace('/.asp/', .$g_sites_img2.'.jpg', $pagename1);
?>
  

Почему это все еще выдает мне ошибку?

Комментарии:

1. Чего вы пытаетесь достичь? Что ваш код делает такого, чего он не должен делать? Что ваш код не делает того, что должен?

2. Чего вы ожидаете, что произойдет? Что происходит вместо этого?

3. Это выдает мне ошибку синтаксического анализа: синтаксическая ошибка, неожиданное ‘.’ в /home/game1/public_html/includes/standard_images_screenshot_2.php в строке 1

4. Код принимает название страницы и преобразует его в изображение, а затем использует imagick для (получения изображения), а затем вставляет изображение на страницу.

Ответ №1:

У вас есть дополнительное . перед $g_sites_img2 .

 $imageurl = preg_replace('/.asp/', .$g_sites_img2.'.jpg', $pagename1);?>
                                    ^ Here's your problem
  

Я согласен с @dtbarne — preg_replace() здесь совершенно не нужно. Вместо этого вы должны использовать str_replace() .

Комментарии:

1. Спасибо, Рейф, мне нравится, как ты раньше подчеркивал проблему!

2. В чем разница между preg_replace и str_replace?

3. @Gerald preg_replace принимает регулярное выражение, а str_replace просто принимает обычную старую строку. В вашем случае вы просто заменяете обычную старую строку, поэтому вам не нужно регулярное выражение.

4. Я новичок в PHP, много лет работал с кодом на ASP, и должен сказать, что я впечатлен всеми различными функциями, которые поставляются с PHP

5. @Gerald это действительно PITA, потому что существует триллион функций с противоречивыми именами и аргументами, и все они находятся в глобальном пространстве имен. Там много всего, но это очень грязно.

Ответ №2:

Не похоже, что preg_replace необходим.

Почему вы не можете просто использовать str_replace? В любом случае, у вас синтаксическая ошибка (дополнительная точка).

 $imageurl = preg_replace('/.asp/', $g_sties_img2 . '.jpg', $pagename1);
  

Ответ №3:

Попробуйте это:

 <?php $imageurl = preg_replace('/.asp/', $g_sites_img2.'.jpg', $pagename1);?>
  

Обратите внимание на отсутствие начала . во 2-м аргументе preg_replace() вызова. Кроме того, нет необходимости в первой строке, поскольку вы все равно записываете результат preg_replace в эту переменную.