PHP - замена точки на стрелки - PullRequest
0 голосов
/ 16 апреля 2020

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

Как вы можете видеть, я храню шаблон html в моей базе данных.

Это код, который я использовал для вывода этого html:

$php = Blade::compileString($template->content);
dd($php) //i used laravel framework, btw.

Тогда это вывод:

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Exmaple.com</title>
    <style>
    </style>
</head>
<body>

    <div class="account-details">
        <b>Account Name</b>: <?php echo e(company.name); ?><br>
        <b>Plan</b>: <?php echo e(plan.name); ?><br>
        <b>Source</b>: <?php echo e(source.name); ?><br>
        <b>Source Type</b>: <?php echo e(source.source_type.name); ?><br>
        <br>
    </div>

    <div class="welcome" style="font-family:Arial;font-size:small">
        Hi <?php echo e(user.first_name); ?>,<br>
        <br>
        There seems to be a problem blah blah blah<br>
        <br>
        Details of the problem are:<br>
        <?php echo e(sourceMessage); ?><br>
        <br>
        You can check and update the source here:<br>
        https://example.com<br>
        <br>
        <br>
        <span style="font-size:12.8px">
            Kind regards,<br>
            <br>
           Test Team<br>
            <br>
            Email: <a href="mailto:test@example.com" target="_blank">example.com</a><br>
            Website: <a href="http://example.com" target="_blank">example.com</a><br>
        </span>
    </div>
</body>
</html>

Я хочу изменить . (точку) на ->, поэтому в этом примере некоторые из текст будет выводиться как:

от <?php echo e(company.name); ?> до <?php echo e(company->name); ?>

от <?php echo e(source.name); ?> до <?php echo e(source->name); ?>

Так что я думаю, что если это в <?php echo e(whatever); ?>, то это время, когда мы проверяем и заменяем . на ->?

Я думаю, что это может сделать RegEx, но я не эксперт в этом.

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

Ответы [ 2 ]

2 голосов
/ 16 апреля 2020

Вы можете использовать preg_replace для поиска фрагментов кода, соответствующих <?php ... e(f) и заменить . s в f на ->:

$html = preg_replace_callback('/(<\?php\s+.*?\be\()([^)]+\))/',
                              function ($m) {
                                  return "{$m[1]}$" . str_replace('.', '->', $m[2]);
                              },
                              $html);

Обратите внимание, что мы используем обратный вызов как это упрощает замену a.b.c на a->b->c. Кроме того, чтобы действительно выглядеть как PHP, вам нужно добавить $ в начале имени переменной, что делает этот код. Если вы не хотите этого, просто измените {$m[1]}$ на {$m[1]}

Демо на 3v4l.org

0 голосов
/ 16 апреля 2020

Если вы делаете это в редакторе, таком как VS-код или Sublime, вам просто нужно заменить части использования функции e.

CTRL + H (В Sublime или VS-коде), чтобы открыть диалоговое окно замены. , Убедитесь, что выбрана опция Regex.

Это бы помогло;

Поиск (e\(.+)\.(.+\))

Заменить $1->$3

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...