Всем привет.
Столкнулись с немного нетривиальной задачей: необходимо было найти в базе данных сайта WordPress все записи с кириллицей.
Для этого вот нашли такое решение:
<?php
// Подключение к WordPress
require_once('wp-load.php'); // путь к вашему wp-load.php
global $wpdb;
// Таблица и поля для проверки
$table = 'таблица';
$fields = ['поле_таблицы', 'еще_одно_поле_если_нужно'];
// Получаем все строки
$rows = $wpdb->get_results("SELECT * FROM $table");
$counter = 0;
foreach ($rows as $row) {
foreach ($fields as $field) {
$value = $row->$field;
// Проверка на кириллицу с игнорированием эмодзи
// if (preg_match('/[А-Яа-яЁё]/u', $value)) {
// $counter++;
// echo "Строка ID {$row->comment_ID}, поле {$field} содержит кириллицу: " . htmlspecialchars($value) . "<br>";
// }
$value_unserialize = maybe_unserialize($value);
if (is_array($value_unserialize)) {
array_walk_recursive($value_unserialize, function($v) {
if (is_string($v) && preg_match('/[А-Яа-яЁё]/u', $v)) {
$counter++;
echo "Содержит кириллицу: " . htmlspecialchars($v) . "<br>";
}
});
} elseif (is_string($value_unserialize) && preg_match('/[А-Яа-яЁё]/u', $value_unserialize)) {
$counter++;
echo "Содержит кириллицу: " . htmlspecialchars($value_unserialize) . "<br>";
}
}
}
echo 'Таблица для проверки: '.$table.'<br/>';
echo 'Найдено строк с кириллицей: '.$counter;
Этот метод:
- Игнорирует эмодзи.
- Проверяет всю строку или массив.
- Находит реальную кириллицу, а не случайные байты.
С этим скриптом вы можете перебрать как одно поле таблицы, так и все, которые вам нужны.
Также в конце работы скрипта указывается сколько было найдено записей с кириллицей и какие там данные находятся.
Надеюсь, что пригодится кому-то еще, кроме нас этот скрипт!
Добавить комментарий