Как вывести номер телефона на сайте?

Ссылка скопирована
1 ответ

Доброго времени суток.
Сайт на вордпресс, в админке сделал поле для ввода номера телефона
Вывожу поле стандартным способом (ранее работало без проблем)

<a href="tel://<?php echo ($pole['phone']); ?>">                          <?php echo ($pole['phone']); ?>                      </a>

<a href="tel://<?php echo ($pole['phone']); ?>"> <?php echo ($pole['phone']); ?> </a>

При вводе телефона в формате +7(888)88-88-88
Результат получается +7+888+88+88+88
Откуда берутся +, как привести результат к такому виду +7(888)88-88-88
Спасибо.

Дополнительно:

А так попробуй

<?php echo ("+7(888)88-88-88"); ?>

и еще тип надо посмотреть

<?php echo (gettype($pole['phone'])); ?>

  • Убери // из урла
  • Не лечится
  • Ответы:

    Результат получается +7+888+88+88+88

    Если в url(href) ссылки, то помнится мне, там допустимы только плюсик и цифры.
    Я чистил так:

    &lt;a href="tel:&lt;?php echo preg_replace("/[^+d]/", "", get_option('phone'));?&gt;"&gt;&lt;?php echo get_option('phone'); ?&gt;&lt;/a&gt;

    &lt;a href="tel:&lt;?php echo preg_replace("/[^+d]/", "", get_option('phone'));?&gt;"&gt;&lt;?php echo get_option('phone'); ?&gt;&lt;/a&gt;

    Если в тексте ссылки, то у меня версий нет.

    Update. Похоже, современные браузеры/звонилки, невзирая на RFC, сами преобразовуют номер телефона в понятный им формат.

    • Если телефон портиться где-то пролезая через URL то надо наверное urlencode/decode делать. Вот как тут пишут https://www.php.net/manual/en/function.urlencode.php
    Нужно решить такую задачу?

    Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

    Заказать помощь
    Лучший ответ
    1
    Юрий Linux Ответ

    Для ссылки tel: телефон в href должен быть очищен от скобок, пробелов и дефисов. А видимый текст можно оставить в красивом формате +7(888)88-88-88. То есть нужно разделить «номер для звонка» и «номер для отображения».

    Пример:

    $phone_display = $pole['phone'] ?? '';
    $phone_href = preg_replace('/[^0-9+]/', '', $phone_display);
     
    echo '&lt;a href="tel:' . esc_attr($phone_href) . '"&gt;' . esc_html($phone_display) . '&lt;/a&gt;';

    $phone_display = $pole['phone'] ?? ''; $phone_href = preg_replace('/[^0-9+]/', '', $phone_display); echo '&lt;a href="tel:' . esc_attr($phone_href) . '"&gt;' . esc_html($phone_display) . '&lt;/a&gt;';

    В href не нужен tel://. Используйте tel::

    &lt;a href="tel:+78888888888"&gt;+7(888)88-88-88&lt;/a&gt;

    &lt;a href="tel:+78888888888"&gt;+7(888)88-88-88&lt;/a&gt;

    Если у вас в результате получается +7+888+88+88+88, значит значение где-то до вывода уже проходит через форматирование или замену символов. Проверьте, что реально лежит в переменной:

    var_dump($pole['phone']);

    var_dump($pole['phone']);

    Если это поле ACF, проверьте тип поля. Для телефона лучше использовать обычный Text, а не Number. Числовое поле может убрать плюс, изменить формат или повести себя странно с ведущими символами.

    И ещё: в HTML-атрибуте href не стоит оставлять скобки и пробелы. Некоторые браузеры их терпят, но мобильные устройства и мессенджеры могут обрабатывать ссылку нестабильно. Поэтому красивый формат — в тексте ссылки, очищенный формат — в tel:.

    Для надёжности можно хранить телефон в двух полях: «телефон для отображения» и «телефон для ссылки». Но обычно достаточно одного текстового поля и очистки при выводе. Не форматируйте номер через математические операции и не используйте тип number: телефон не число, а строка, у которой важны плюс, скобки, пробелы и региональный формат.

    Другие ответы (0)

    Пока нет других ответов. Будьте первым, кто поможет автору.

    Ответить на вопрос

    комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *

    Вам также может быть интересно