• Странное поведение str_replace() при заменах в HTML?

    JastaFly, Вот вы тут пишете, что всё работало, но вы проявили невнимательность в preg_replace_callback.
    Это и есть проблема, это и будет у вас всегда проблемой, если будете парсить HTML регулярками. Потому что это всё трудно анализировать и дебажить. Жаль, что будете учиться на своих ошибках, а не на чужих. Я когда-то, много лет назад тоже был такой парсильщик HTML регулярками, когда их изучил. Уйму времени потратил совершенно бестолково.
    А насчёт того, что я вам посоветовал регулярку после обработки парсером, так это потому, что это как раз и место для регулярок: одна типовая строчка. Тут не запутаешься.
    Написано
  • Что стоит использовать для защиты PHP-кода на текущий момент?

    Как я понимаю, вы разрабатываете что-то типа платных плагинов или тем для опенсорсных CMS, потому что если вы разрабатываете сервис полностью сами, то мой совет был бы вообще сменить язык программирования и распространять бинарники вместо кода в текущей модели бизнеса, либо сесть всем вместе и подумать, что вам изменить, чтобы не применять подобные архаичные методы. Сейчас мало кто таким пользуется, и советов хороших по выбору того или иного, вы вряд ли получите.
    Если выбора нет, то простые обфускаторы кода вам не помогут, потому что вернуть их в человекочитаемый вид проще простого (особенно в наш век GPT), и не так дорого. Поэтому, надо выбирать то, что работает в связке с сервером, типа ioncube. И если вы уже собрали список, то просто попробуйте сами все варианты и выберите что-то, что будет максимально-комфортным для вас.
    Написано
  • Что стоит использовать для защиты PHP-кода на текущий момент?

    Полностью с вами согласен, но всё же у фрилансеров, особенно начинающих, до сих пор бывает так, что нет выбора, и им приходится соглашаться на требования некоторых нерадивых заказчиков. Они берут в том числе и такие заказы. Обиднее всего, когда работа была проделана очень большая, а клиент, казавшийся адекватным, вдруг отказывается платить совсем.
    У меня лично лет 10 или даже больше назад был случай, когда сдавал человеку подряд несколько проектов, он прекрасно платил, и его просьба залить код на прод до оплаты вообще не вызвала никаких подозрений. И тут связь оборвалась, все доступы были отключены, меня просто игнорировали. На его голову он забыл закрыть один из FTP доступов. И я просто зашифровал одним из подобных обфускаторов весь код, который сам лично написал. Магическим образом моя работа была через неделю оплачена, а я предоставил незашифрованный код...
    Написано
  • Парсер на javascript?

    Что-то такое можно попробовать, если ещё работает.
    https://github.com/christophe77/wordpress-check
    Написано
  • Как правильно задать запрос UPDATE где название столбца переменная?

    Михаил Смирнов,
    <?php
    // Т.к. мы подставляем переменную $column прямо в SQL код без обработки,
    // то мы обязаны позаботиться о том, чтобы там не было SQL-иньекций
    // Поэтому, мы должны крайне тщательно проверить, соответствует ли наше значение допутимым вариантам
    // Проверяем, что там только 1, 2 или 3, а также проверяем, чтобы там не было вредоносного "продолжения"
    $columnNumber = (int) $id[1];
    if ($columnNumber < 1 || $columnNumber > 3 || strlen($id[1]) > 1) {
        throw new \InvalidArgumentException("Неверный номер поля");
    }
    
    $column = 'count' . $columnNumber;
    Написано
  • Как правильно задать запрос UPDATE где название столбца переменная?

    Я считаю, что если всё работает и хорошо читается, то не надо усложнять код.
    Ну, можно, например, эти 3 if заменить одним, обработать ситуацию, когда там могут быть не только эти три цифры 1,2,3.
    Можно параметры в запросе сделать именованными, а не просто в виде вопросительных знаков. Вынести объявление переменной $sql_upd наверх, рядом с $sql.
    Написано
  • Symfony HttpClient и Simple HTML DOM?

    Ну так включите дебаггер, посмотрите, что возвращает getInfo, getHeaders, getContent и т.д.
    Кто-ж знает, что у вас там за прокси, верно ли вы всё настроили. Проанализируйте хедеры, наверняка там что-то есть
    Написано
  • Странное поведение str_replace() при заменах в HTML?

    JastaFly,
    1. Ничего вам не мешает использовать регулярные выражения для парсинга HTML. Каждый волен делать всё, что взбредёт ему в голову. Я вам даже отличную статью подкину, где описывается мощь регулярных выражений, и то, как с помощью них можно спарсить даже такие языки, как HTML. https://habr.com/ru/articles/171667/
    Дело в том, что HTML - это констекстно-свободный и при этом не регулярный язык. Видите это словосочетание "не регулярный"? Это вам никаких намёков не даёт? В статье показано, как можно, сделав операцию на глаза через задний проход, спарсить HTML регулярками, но зачем оно нам надо? Сделать код абсолютно не читаемым и не подверженным дебаггингу? Если это ваша цель, то смело идите к ней.

    2. Мы очень часто забываем, насколько толерантны браузеры к чтению и отображению невалидного и непривычного нам HTML кода. Дело в том, что HTML - это далеко не красивый XML, в котором существует чёткая и единственно-верная спецификация. HTML - это самый настоящий бардак (как и Javascript... только не бейте меня за это))

    Вот вам буквально парочка примеров HTML:

    <!DOCTYPE html>
    <html lang="en">
    <head>
    	<meta charset="UTF-8">
    	<meta http-equiv="X-UA-Compatible" content="IE=edge">
    	<meta name="viewport" content="width=device-width, initial-scale=1.0">
    	<title>Document</title>
    </head>
    <body>
        <select multiple>
            <!-- Не правда ли прекрасно, что значение атрибута value работает без кавычек?-->
            <option value=foo selected>FOO</option>
            <!-- А вот так делают старые любители XHTML -->
            <option value="bar" selected="selected">BAR</option>
            <!-- А что если вот так? ... Да что же это такое происходит?! -->
            <!-- Невалидно, но браузер прекрасно кушает, правда не так, как мы думали -->
            <option value="baz" selected="true">BAZ</option>
            <option value="fuc" selected=false>Ой...</option>
        </select>
        
        <!-- Все картинки работают -->
        <img src="https://placehold.co/20" alt="aaa">
        <img src="https://placehold.co/30" alt="aaa"/>
        <!-- Валидатор сопротивляется, но браузеру плевать -->
        <img src="https://placehold.co/40" alt="aaa"></img>
    
        <!-- Идём дальше -->
        <br /> Тег br закрыт. Само собой, текст находится не внутри br
        
        Точно так же:
        <br> Тег br закрыт. Само собой, текст находится не внутри br
    
        И тут начинается что-то странное:
    
        <div /> Тээк. Div же закрыт. А текст находится внутри Div. Шта?
    
        Спецификация HTML чёткая и понятная. Ничего сильно запоминать не надо.
        Любой новичок справится.
        Так? ... Так?
        
        <input />Этот текст снаружи элемента input
        <input>Этот текст снаружи элемента input. Ошибка, но работает</input>
    
        <div>Этот текст внутри div</div>
        <div />Этот текст внутри div
        
        <!-- Всё валидненько -->
        <p>Этот текст внутри p</p>
        <p>Этот текст внутри p
        <p>Этот текст внутри p</p>
        <!-- Невалидно, но работает в браузере -->
        <p />Невалидно, текст внутри p
        
        И много-много радостей вам парсинг регулярками принесёт...
    
    </body>
    </html>


    И я тут подумал... Ведь вам в жизни придётся парсить регулярками только абсолютно валидные сайты, с идеальным контентом. Ведь разве бывает иначе?

    3. Если ваша цель просто быстренько найти какое-то сочетание символов в HTML коде, то пользуйтесь на здоровье регулярками. Инструмент всегда выбирается под задачу. Но начинающему, как мне кажется, лучше всегда советовать категорично. По типу либо "всегда", либо "никогда". Так ему будет проще, а с нюансами он потом сам разберется. Вот я и посоветовал никогда не использовать регулярки при парсинге HTML.

    P.S. Совсем забыл про решение. При помощи парсера, что вам предложили, выбираете все ссылки, которые хотите проверить, проверяете их атрибут href на вшивость, и заменяете этот атрибут на корректное значение. Потом сохраняете весь DOM. Ктати, вот тут, при проверке конкретной ссылки, если не терпится, можно использовать регулярку, ведь это просто одна строчка урла, без кучи мусора. Но зачем, если тут гораздо проще обойтись без неё?
    Написано
  • Как добавить элемент в массив по условию JS?

    WbICHA, Предложи еще реакт засунуть сюда )))
    Написано
  • Как добавить элемент в массив по условию JS?

    WbICHA, Как раз первым признаком новичка является желание везде совать недавно изученные reduce вместо давно изученного for. Это ведь не модно, и плевать, что reduce хуже читается, зато можно перед одноклассниками попонтоваться.
    А вот понимание того, что надо всегда по мере возможности упрощать свой код, чтобы все в команде мгновенно могли его прочесть, чтобы баг был виден сразу, вот это есть признак наличия опыта.
    Я в жизни не поверю, что простой цикл for сложнее читается, чем reduce. Это-ж надо выдумать такое )))
    Написано
  • Как добавить элемент в массив по условию JS?

    WbICHA, Я вам больше скажу. В данном конкретном случае reduce не только сильно ухудшает читаемость кода по отношению к обычному for, но и работать будет медленнее, потому что вызов функции на каждой итерации - не бесплатная операция.
    Усложнять код ради мнимой элегантности - это вредительство
    Написано
  • Как скачать весь контент с сайта?

    ElezthemDev, Это нормальный html-код. Просто изображения встроены прямо в этот html файл в виде base64. Там есть и тексты и всё остальное
    Написано
  • Как скачать весь контент с сайта?

    ElezthemDev, Как это нельзя редактировать? Открываете html файл и редактируете, что душе угодно.
    Написано
  • Symfony каталог товаров с динамичной фильтрацией?

    Кирилл Горелов, Ну, в принципе, да. Хотя я даже и не знал о существовании специального термина для описания такой структуры. Подобный принцип организации данных является, строго говоря, говнокодом, потому что, если у вас данные будут разных типов, то поле value не может полностью соответствовать типу данных вашей характеристики, и вам придётся как-то сериализовать эти данные в строку, чтобы хранить в базе. Однако, т.к. задача у вас - не создавать новых таблиц, то это чуть ли не единственное решение в традиционном SQL
    Написано
  • Проблемы с mail в php. Что я делаю не так?

    ValdikSS, Вы совершенно правы... Ровно до тех пор, пока соседний пользователь этого хостинга, который, скорей всего, судя по тому, что я здесь читал, обычный shared хостинг, не начнёт рассылать нечто похожее на спам.
    Написано
  • Проблемы с mail в php. Что я делаю не так?

    ValdikSS, Потому что все ваши письма полетят прямиком в Спам. Почти все современные почтовые сервисы типа того же Gmail и Яндекса по умолчанию крайне подозрительно относятся к новым IP адресам, с которых к ним приходит почта. Я бы сказал даже, что они скорей по умолчанию заблокируют новый источник писем. Ведь спам - это чудовищная проблема современности.
    Поэтому, рассылать письма нужно из доверенного источника (сервиса), который можно использовать как раз через SMTP.
    Написано
  • Странное поведение str_replace() при заменах в HTML?

    JastaFly,
    Каждый опытный веб-программист знает два непреложных закона:
    1. Если вы используете регулярные выражения для решения проблемы, то у вас теперь две проблемы. ) Это правило шуточное, но в каждой программистской шутке есть громадный кусок горькой правды...
    2. НИКОГДА! не используйте регулярные выражения для парсинга HTML, а используйте специальный парсер. И вот это правило серьёзное, и нарушать его выйдет себе дороже.
    Написано
  • Проблемы с mail в php. Что я делаю не так?

    2024 год.
    - Не стоит использовать http:// на публичных ресурсах, а только https://
    - Не стоит коммитить пароли и токены доступа в Git
    - Не стоит использовать везде один и тот же простой пароль
    - Не стоит публично критиковать начальство и волшебную спецоперацию
    - Не стоит использовать функцию mail() в PHP, а использовать вместо этого SMTP в PHPMailer
    Написано
  • Как сделать обтекание текста / блоков с необычной формой?

    Don Puh, Скругления даст вам clip-path. Почему-то мне кажется, что в примере форма заранее подогнана вручную под определенный фиксированный текст, который уже потом просто появляется при помощи анимации. Т.е. сначала анимируется закругленная форма объекта, подгоняется под заранее выбранный текст, а потом этот текст просто появляется.
    Написано
  • Как скрыть элемент, если он не заполнен?

    Александр Коновалов, Я не рекомендую вам в шаблонах, которые выводят html, придумывать какие-то хитрые конструкции и что-то "упрощать". В файлах, где выводится html всё должно быть максимально читаемо, и тут должно быть как можно меньше запутанного кода.
    Кстати, советую вам использовать альтернативный синтаксис PHP для html-кода без фигурных скобок. Например:

    <?php if (!empty($row['attr-size'])) : ?>
     <li>Размер <?php echo $row['attr-size']; ?>мм</li>
      <li>Назначение <?php echo $row['attr-coating']; ?></li>
    <?php else :?>
    <li>Назначение <?php echo $row['attr-coating']; ?></li>
     <? endif;?>
    Написано