Как убрать вопросительный знак
Argument ‘Topic id’ is null or empty
Сейчас на форуме
© Николай Павлов, Planetaexcel, 2006-2023
info@planetaexcel.ru
Использование любых материалов сайта допускается строго с указанием прямой ссылки на источник, упоминанием названия сайта, имени автора и неизменности исходного текста и иллюстраций.
| ООО «Планета Эксел» ИНН 7735603520 ОГРН 1147746834949 |
ИП Павлов Николай Владимирович ИНН 633015842586 ОГРНИП 310633031600071 |
Как удалить � (знак вопроса в ромбе) из текста?
Как удалить из текста символ битого UTF символа, если этот символ уже таким дали. смена кодировки ничего не дает. str_replace, preg_replace не могу по символу сделать, так как при копировании из текста он меняется на просто квадрат
- Вопрос задан более трёх лет назад
- 5067 просмотров
4 комментария
Простой 4 комментария

Дмитрий @slo_nik Куратор тега PHP
Добрый день.
Дополните вопрос примером текста, кодом, которым Вы получаете этот текст.
Без всего этого можно долго гадать.

Алекс Иванов @Protossan Автор вопроса
slo_nik, текст просто дан в txt файле. Т.е. он уже битый.

Дмитрий @slo_nik Куратор тега PHP
Алекс Иванов, пересохраните данные в нужной кодировке. Например при помощи sublimetext

Дмитрий @slo_nik Куратор тега PHP
Алекс Иванов, а для этого попробуйте открыть в нужной кодировке.
Решения вопроса 1

Еда — это святое
Для начала изучить текст и определить, а как собственно эти битые символы появились.
Если из-за того, что в некоторых местах текста между байтами символа был вставлен пробел — в таком случае можно просто удалить пробелы, которые располагаются там, где они в utf-8 невозможны (после 11xxxxxx или перед 10xxxxxx в двоичном представлении).
Ответ написан более трёх лет назад
Нравится 2 7 комментариев

Алекс Иванов @Protossan Автор вопроса
Я пробовал, но вот, допустим предложение
Teen, Nella, Keana Moir�
Как тут его убрать можно?

Алекс Иванов, а в hex-редакторе покажите текст

Алекс Иванов @Protossan Автор вопроса
SagePtr, 5465656E2C204E656C6C612C204B6561
6E61204D6F6972EFBFBD

Алекс Иванов, в данной последовательности битый символ уже заменён на символ вопроса

Алекс Иванов @Protossan Автор вопроса
SagePtr, и мне надо его удалить. Как это можно сделать? Т.е. восстанавливать исходный символ не надо, просто зачистить «за ним»

Алекс Иванов, как вариант, удалить из текста все последовательности байт EF BF BD

Алекс Иванов @Protossan Автор вопроса
Это можно сделать с помощью регулярки?
Ответы на вопрос 2
Способ длинноватый, но простой и приемлемый для «почтичайников».
В тексте имеются символы «вопрос в черном ромбе» �. Удалить можно только вручную, по одному. Инструменты «найти» и «заменить» не помогают, они не видят этот символ. Применить макрос или код – не для всех. Вообще этот символ означает, что в исходном тексте были символы, отсутствующие в тексте с текущей кодировкой.
Создаем новый документ ворд, копируем в него символы, можно вместе с небольшим фрагментом текста, так, чтобы в будущем по положению в тексте можно было найти символ, даже если все будет заменено на абракодабру. Удобно повторить несколько символов в начале строки.
Сохраняем текст.
В настройках ворд на вкладке файл-параметры-дополнительно-группа «общие» (внизу) ставим птичку «подтверждать преобразование формата файла при открытии»
Сохраняем текст в txt. При нажатии «сохранить» появится окно «преобразование файла». По умолчанию стоит кодировка виндовс. Справа под окном кодировок будет предупреждение о том, что «текст, выделенный красным невозможно сохранить в выбранной кодировке». Ниже в окне образца, пролистав его увидите красные символы. Слева вверху три варианта кодировки. Ставим точку «Другая». Активируется окно кодировок. Находим кодировку, при которой символы в образце становятся некрасными, но текст читается. Мне помогла кодировка «Китайская упрощенная (GB 18030)». Юникод не помог, т.к. в будущем при замене инструмент «заменить» не увидел некоторых символов этой кодировки. Т.е. в китайской кодировке символы, заменившие � ромб совпали с виндовс (я так понимаю ANSI), а в Юникоде � ромб заменился на символы, часть которых отсутствует в кодировке виндовс. Жмем ОК.
Закрыть.
Открыть с помощью Ворд. При открытии в запросе выбрать обычный текст. Откроется абракодабра.
В абракодабре найти символ (скорее всего группу символов), соответствующие символу � ромб.
Инструментом «заменить» заменить найденные символы на какие-нибудь другие (потом моно будет просто менять).
Сохранить.
Закрыить.
Открыть с помощью ворд, выбрав опять кодировку «Китайская упрощенная (GB 18030)».
Сохранить как docx.
Может можно и проще. Смысл понятен. Проблема в разных символах в разных кодировках. Еще проще написать какой-нибудь код, но это не для массового пользователя.
Если в Dock на Mac появляется знак вопроса

Если в Dock находится значок приложения, которое Вы удаляете с компьютера Mac, то значок в Dock останется, но сверху от него появится вопросительный знак.
- Как убрать вопросительный знак. Перетяните значок за пределы Dock, пока не отобразится надпись «Удалить».
Чтобы снова загрузить приложение, приобретенное в Mac App Store, см. раздел Установка покупок из App Store.
Редирект со знака вопроса в конце URL
Несколько месяцев назад начал замечать в Яндекс.Вебмастере индексацию дублей страниц со знаком вопроса в конце URL:
- https://libramedia.ru/?
- https://libramedia.ru/blog/?
По времени это примерно совпало с анонсом новой механики в Яндекс.Вебмастере:
Яндекс тестирует новую механику для более точного распознавания поисковых фраз в браузерах с ограничением межсайтовых cookies. Вы можете заметить новый параметр ysclid у части ссылок из результатов поиска на свой сайт. Подробнее
Самое забавное, что ссылок с параметрами ?ysclid я после появления данного анонса не заметил ни разу. Зато сразу на нескольких проектах начали индексироваться дубли страниц с вопросительными знаками в конце URL.
Итак, задача состоит в следующем: избавиться от появления подобных дублей, не повлияв при этом на работу начинающихся с вопросительного знака GET-параметров (что было бы чревато проблемами — например, в Bitrix стандартная пагинация работает путем добавления параметра ?PAGEN_1 к адресам разделов).
Немного подумав, нашел 3 варианта решения — для Apache, nginx и универсальный редирект на PHP.
Редирект через .htaccess
Данный способ подойдет для веб-сервера Apache, поддерживающего директивы из конфигурационного файла .htaccess:
# Убираем знак вопроса в конце URL (/?) RewriteCond % ^[^\s]+\s+[^?]*?\? RewriteCond % ^$ RewriteRule .? %? [R=301,L]
Редирект в nginx
Если вы пользуетесь VPS и отошли от связки nginx + Apache в пользу связки nginx + PHP-FPM, то для избавления от редиректа нужно добавить следующую директиву в блок server конфига интересующего вас сайта:
# Убираем знак вопроса в конце URL (/?) if ($request_uri ~ «^(.*)\?$»)
Редирект на PHP
И, наконец, универсальный вариант с редиректом на PHP, который можно использовать если недоступны первые два (например, хостинг на nginx, но нет административного доступа к серверу).
Добавьте следующий код в header.php или любой другой сквозной элемент сайта:
Заключение
Борьба с появлением дублей страниц — одна из базовых задач технического SEO. Во многом помогает правильное внедрение атрибута rel=»canonical» , но использование канонических ссылок не является 100% гарантией отсутствия возникновения различного «мусора» в поисковой выдаче.
Стоит регулярно мониторить отчеты об индексации продвигаемых ресурсов и пресекать возможные проблемы с дублями сразу же после их возникновения.

Автор статьи:
Дмитрий
С 2013 года профессионально занимается созданием и продвижением коммерческих и информационных веб-сайтов. В 2018 году завел блог Libra Media, в котором делится опытом и практическими наработками в сфере SEO, администрирования серверов и доработок для сайтов на Bitrix и WordPress.