2015-08-24 3 views
3

я строка, как это время вошел в мою базу данных, что я не могу форматировать прежде чем он будет сохранен:PHP удаление несколько вещей из строки сразу

image/upload/v1440427262/hglz466d8mm1pazysaoh.jpg#32e2e9a111a4f9f4aa01dbad2ca2aa403c994d28 

Единственная часть этой строки, которые я хочу для использования:

hglz466d8mm1pazysaoh.jpg 

Я пытаюсь использовать strpos для удаления лишних данных.

До сих пор мне удалось удалить все после того, как и в том числе хэштегом

($ данных является исходной строки):

$dataclean = substr($data, 0, strpos($data, "#")); 

Это работает, как ожидалось с $ dataclean возвращения:

image/upload/v1440427262/hglz466d8mm1pazysaoh.jpg 

Но я не знаю, как удалить остальные избыточные данные:

image/upload/v1440427262/ 

Кроме того, может ли это быть сделано одним ударом или его нужно разделить на несколько операций?

+0

Для последней части, вы можете использовать ** $ Темп = взрываются ("/", $ dataclean); $ image = $ temp [3]; ** –

+0

Или с регулярным выражением: '$ dataclean = preg_replace ('~. */| #. * ~'," ", $ data);' –

+0

Я отправился в basename/strpos, поскольку я читал, что это быстрее, чем регулярное выражение, и я использую эту функцию для обновления вновь созданной записи базы данных. Не уверен, насколько верно это утверждение или что я делаю, это особенно безопасно, но, похоже, он работает. – Grant

ответ

6

Использование basename:

$dataclean = basename(substr($data, 0, strpos($data, "#"))); 
+0

Черт, это аккуратно :) Спасибо человеку! – Grant

1

Как упомянуто в вопросе, сначала удалите значения после # с помощью

$link = substr($data, 0, strpos($data, "#"));

Затем используйте basename() функцию, чтобы получить доступ к имени файла из URL.

Например,

$link = "http://example.com/folderPath/filename.php"; 
    echo basename($link); // It will return filename.php 
+0

Это также возвращает данные после хэша. Вам нужно будет включить удаление этого параметра в функцию «basename». – camelCase

+1

@ ride_85027: Я просто упомянул концепцию с самим примером. Вопрос уже содержит решение для удаления значений после '#' с использованием 'substr'. –

1

Если базовое() не работает, я бы взрываются строку косой чертой.

$data = 'image/upload/v1440427262/hglz466d8mm1pazysaoh.jpg#32e2e9a111a4f9f4aa01dbad2ca2aa403c994d28'; 
$pieces = explode("/", $data); 

$dataclean = substr($pieces[3], 0, strpos($data, "#")); 
+0

Почему 'basename' не должен работать? И это должно быть 'substr ($ pieces [count ($ pieces) -1], 0, strpos ($ data," # ")); в противном случае вам нужно знать каждый раз, когда индекс массива получает –

+0

Спасибо, что добавили, что лакомый кусочек кода. Я считаю, что basename - лучший ответ на этот вопрос. Я не знаю, почему это не сработает, но если это не так, это еще один способ сделать то, что вам нужно. – H0miet

0

Ничего плохого substr + strpos, но это выглядит как ваша строка является URL, чтобы вы могли использовать parse_url изолировать путь, прежде чем использовать basename. Еще один вариант FYI.

basename(parse_url($yourString, PHP_URL_PATH)); 
0

Вы можете использовать функцию регулярных выражений:

preg_match("/[a-z0-9]+\.[a-z]{3}/i", $input_line, $output_array); 

Try the code