|
|
|
| Такая беда:
Есть такая строка кода:
<?
$field = preg_replace("/(?:file\:)?\w\:.*([^\/]\.(?:gif|jpg|png|bmp|tiff))/im",'./files/pix/\1',$field);
?>
| Суть замены состоит в том, чтобы найти в html коде локальный путь к файлу (Например "C:\Documents and Settings\User\Мои документы\Мои рисунки\file.gif"), и заменить его на "./files/pix/filename.ext" Находить - то она находит. А, вот заменяет не совсем удачно. От имени файла остается только последний символ+расширение (Из того же примера, получается "./files/pix/e.gif"). Че тут нужно подправить, чтобы имя файла без обрезаний было?
Заранее спасибо. | |
|
|
|
|
|
|
|
для: XOR
(25.03.2006 в 13:56)
| | наверно нужно после [^\/] поставить здездочку
<?
$field = preg_replace("/(?:file\:)?\w\:.*([^\/]*\.(?:gif|jpg|png|bmp|tiff))/im",'./files/pix/\1',$field);
?>
|
| |
|
|
|
|
|
|
|
для: kasmanaft
(25.03.2006 в 21:04)
| | К сожалению, с этой звездочкой он вообще только расширение файла оставляет. :(
Может у кого есть готовое выражение для замены строки вида
"C:\Documents and Settings\User\Мои документы\Мои рисунки\TEMP\file.ext"
| на А? Поможите? | |
|
|
|
|
|
|
|
для: kasmanaft
(25.03.2006 в 21:04)
| | Порылся на форуме.
Судя по всему, я не первый у кого возникла затыка с визуальным редактором : )
Изучив проблему более детально, я пришел к выводу, что проблемы, на самом деле, две : ))))
Первая проблема - это преобразование строки, вида:
"C:\Documents and Settings\User\Мои документы\Мои рисунки\TEMP\file.ext"
на строку вида "./patch/file.ext"
А вторая проблема - это преобразование строки вида:
"file:///C:/Documents and Settings/User\Мои документы/Мои рисунки/TEMP/file.ext" в строку "./patch/file.ext".
Такой гемор связан с тем, что визуальный редактор, который мы тут пытаемся приспособить, формирует путь к файлу двумя различными способами. Если вставлять файл через диалоговое окно с формой, то путь выглядит, как "C:\Documents and Settings\User\Мои документы\Мои рисунки\TEMP\file.ext". Если же его вставлять через Ctrl+V (Shift+Ins), то путь прописывется в виде "file:///C:/Documents and Settings/User\Мои документы/Мои рисунки/TEMP/file.ext". Вот и выходит, что учитывать и обробатывать нужно оба варианта.
У кого какие соображения? | |
|
|
|
|
|
|
|
для: XOR
(26.03.2006 в 08:38)
| | >"C:\Documents and Settings\User\Мои документы\Мои рисунки\TEMP\file.ext"
>"file:///C:/Documents and Settings/User\Мои документы/Мои рисунки/TEMP/file.ext"
Это как раз большой проблемы не представляет
<?php
$text = 'C:\Documents and Settings\User\Мои документы\Мои рисунки\TEMP\file.ext';
$text = 'file:///C:/Documents and Settings/User\Мои документы/Мои рисунки/TEMP/file.ext';
preg_match("|[^/\\\\]+$|",$text,$out);
echo "./patch/".$out[0];
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(26.03.2006 в 14:45)
| | А..... Эмммммм.... Видимо я не совсем праильно объяснил. Эти строки содержаться внутри HTML файла, причем их там может быть много, и встречаться обе разновидности.
Все это нужно вот для чего:
Есть такой визуальный HTML редактор, который выполнен в виде WEB приложения. И он умеет создавать HTML кстраницы с картинками, а потом делать им UPLOAD. Проблема возникает именно на этапе аплоада. Дело в том, что он формирует HTML файл, в котором все пути к картинкам прописаны локальные. Причем, как я уже говорил ранее, эти пути получаются двух видов - в зависимости от того, как эту картинку туда вставили. Вот, задача в том и состоит, чтобы найти в HTML коде все пути к картинкам и заменить на те, которые должны быть на самом деле. Для наглядности, приведу родной код, который ведет себя некорректно.:
Файл save.php
<?
#######################################
# #
# ArthEdit версия 0.12 #
# #
#######################################
$field = stripslashes($field); // Ну, тут все и так понятно....
$field = preg_replace("/(?:file\:)?\w\:.*([^\/]+?\.(?:gif|jpg|png|bmp|tiff))/im",'./files/pix/\1',$field);
// А вот эта строка как раз и должна делать то, чего она не делает. Кроме того, она
// изначально заточена под обработку только одной разновидности локального пути
// Ну, а здесь мы сохраняем все это в файл.
$fp = fopen("./files/$filename",'w');
fputs($fp,$field);
fclose($fp);
?>
|
| |
|
|
|
|
|
|
|
для: XOR
(27.03.2006 в 03:09)
| | А данные пути встречаются только в тэгах <a> и <img> или ещё где-то? | |
|
|
|
|
|
|
|
для: cheops
(27.03.2006 в 13:55)
| | По идеи только в этих тэгах... Я еще подумаю, но скорее всего только в них. Это же редактор... Код не рукописный.... | |
|
|
|
|
|
|
|
для: XOR
(28.03.2006 в 02:55)
| | Предположим, что у вас путь в атрибутах href и src всегда заключены в кавычки, тогда можно воспользоваться следующим скриптом
<?php
$str = '<a href="C:\Documents and Settings\User\Мои документы\Мои рисунки\TEMP\file.ext"> <img src="file:///C:/Documents and Settings/User\Мои документы/Мои рисунки/TEMP/file.ext"> </a>';
$pattern = "|href=\"([^\"]+)\"|is";
$str = preg_replace_callback(
$pattern,
"plus_href",
$str);
$pattern = "|src=\"([^\"]+)\"|is";
$str = preg_replace_callback(
$pattern,
"plus_src",
$str);
echo $str;
// функция обратного вызова
function plus_href($matches)
{
// В $matches[1] у нас путь - его нужно заменить
// на имя файла - извлекаем его
preg_match("|[^/\\\\]+$|",$matches[1],$out);
return 'href="'.$out[0].'"';
}
// функция обратного вызова
function plus_src($matches)
{
// В $matches[1] у нас путь - его нужно заменить
// на имя файла - извлекаем его
preg_match("|[^/\\\\]+$|",$matches[1],$out);
return 'src="'.$out[0].'"';
}
?>
|
| |
|
|
|
|
|
|
|
для: XOR
(27.03.2006 в 03:09)
| | Вы уверены, что сам редактор не умеет формировать относительные пути к картинкам, которые не зависят от того, на своей машине страница с картинками лежит, или уже на хосте? Ставить абсолютные пути - как-то уж очень злобно получается. | |
|
|
|
|
|
|
|
для: Trianon
(28.03.2006 в 10:24)
| | cheops, спасибо! Я попробую. Напишу - что получилось
Trianon я уверен в том, что, по крайней мере этот редактор - не умееет. Да и как его научить, если вставка рисунка осуществляется, по сути, через стандартный input. А он, как понимаете, относительные пути не пропысывает. Хотя, разумеется, никто не запрещает править код в ручную. Но в таком случае, этот редактор вообще не нужен. Одного фронпейджа достаточно. Моя задача - максимально автоматизировать наполнение контента.
Всем спасибо, кто помогал. Попробую че - нить сделать. О результатах напишу. | |
|
|
|
|
|
|
|
для: XOR
(29.03.2006 в 02:57)
| | Ура! Все работает! Спасибо всем, кто помогал, особенно cheops | |
|
|
|