2014-12-14 3 views
2

Я создаю небольшую утилиту PHP с Linux, которая извлекает веб-страницы и изображения с сервера Windows. Все работает хорошо, кроме имен файлов и ссылок. Windows не против прописных или нет, но клиент linux.PHP regex match capital html

Обрабатываемые файлы содержат ссылки, на которые иногда ссылаются заглавные буквы, иногда нет.

Я сохраняю все файлы, используя заглавные буквы, без проблем.

После получения веб-страницы с использованием curl в строку, я хочу убедиться, что любые ссылки в строке «веб-страницы» - на другие «внутренние» htmlpages правильные.

Файлы ссылаются на «A1.HTML», «a23.hTmL», «A123.htm», «a2.html», «a213.HTML» и т. Д.

Общая картина: Ссылка будет всегда начинаются с (или А), а затем с помощью счетчика (от 1 до 999) и расширением .html (или .htm или .htm или .html)

Код:

function get_url(){ 
    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_URL, $_SESSION['GETURL']); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    $output = curl_exec($ch); 

// Now the page is stored in $output 

// Replace a|A\d{1,999}\.[HTML|html|Html|htm|Htm|HTM] with A <NUMBER FROM BEFORE> <dot> HTML 

// maybe use preg_replace 

Пример (страница проблема "A3.HTML"):

Перед:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><HTML><HEAD><TITLE>MYTITLE</TITLE><META HTTP-EQUIV='refresh' content='8;URL=A3.HTML'> ........... 

или:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><HTML><HEAD><TITLE>MYTITLE</TITLE><META HTTP-EQUIV='refresh' content='8;URL=A3.html'> ........... 

или:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><HTML><HEAD><TITLE>MYTITLE</TITLE><META HTTP-EQUIV='refresh' content='8;URL=a3.HTML'> ........... 

или:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><HTML><HEAD><TITLE>MYTITLE</TITLE><META HTTP-EQUIV='refresh' content='8;URL=A3.HTML'> ........... 

Любая помощь образуя подходящую функцию, чтобы обеспечить форматирование в строке высоко оценена.

Заранее спасибо

/Niels

+0

Это не предмет ОС, так как это предмет файловой системы. Windows/OS X по умолчанию используют не зависящие от регистра форматы, но Linux использует регистр с учетом регистра. Возможные другие подходы: Создайте диск/образ диска/диск с файловой системой без регистра и выполните эту папку. Сделайте все имена файлов в нижнем регистре и используйте что-то вроде mod_rewrite, чтобы ввести требуемый путь к файлу. –

+0

активация mod_speling в apache также решит проблему. –

ответ

1

Это должно сделать трюк:

// Replace a|A\d{1,999}\.[HTML|html|Html|htm|Htm|HTM] with A <NUMBER FROM BEFORE> <dot> HTML 
$content = preg_replace('/a(\d{1,3})\.html?/i','A$1.HTML',$output); 

preg_replace /imodifier означает, что регулярное выражение не является чувствительно к регистру. $1 в заменяющей строке - backreference - это означает, что она возьмет захваченную группу из строки соответствия (в данном случае, числа) и применит ее к замене.

+0

Будет ли это '\\ d' или' \ d'? – jerdiggity

+0

@Tryth Не нужно эсапе, что !! Проверьте [руководство] (http://php.net/manual/en/function.preg-replace.php) – Enissay

+0

@ Enissay Упс! Не знал. Теперь отредактировали сообщение, чтобы удалить ненужные обратные косые черты. – Tryth