Вопрос или проблема
Я использую wp_insert_post (по нескольким причинам) в скрипте, который я пишу, и это вызывает обрезку любой строки, содержащей апостроф, до этого символа (включая символ). Вот код, который я использовал для тестирования:
$question = "Если вам нужно, это кто вы называете";
echo $question."<br />";
$post = array(
'post_title' => $question,
'post_status' => 'publish',
'post_type' => 'question'
);
echo $post['post_title'];
$the_post_id = wp_insert_post($post);
Это странно, потому что когда я выводлю обе строки, они выводятся корректно, так что я выяснил, что проблема заключается в функции wp_insert_post. Когда я просматриваю это в WordPress, заголовок просто ‘Если вам’ и затем обрывается.
Я нашел подобную проблему здесь:
http://premium.wpmudev.org/forums/topic/q-wp_insert_post-truncates-post-content-on-quotes-is-there-a-proper-way-to-escape-these-things
Но на этой странице, похоже, нет решения. Есть идеи, что происходит и как это решить? Не знаю, почему это вызывает проблему. Я исследую, связано ли это с чем-то другим в моем коде, но, похоже, это не так, поскольку элемент массива выглядит нормально, когда выводится до функции wp_insert_post().
Спасибо за вашу помощь!
ИЗМЕНЕНИЕ
Я должен был уточнить, что эти данные необходимо вызывать из массива, где я получаю данные из другого источника, так что у меня не будет доступа к строкам напрямую. Я попробовал mysql_real_escape_string(), которая должна выполнять эту работу автоматически, но это, похоже, не сработало…
Попробуйте экранировать символ апострофа, то есть
$question = "Если вам\’ нужно, это кто вы называете";
Апострофы имеют особое значение в коде PHP, и именно поэтому происходит обрезка.
Ответ или решение
Проблема, с которой вы столкнулись при использовании функции wp_insert_post
, действительно может быть связана с обработкой строк, содержащих апострофы. Давайте разберем это более подробно, чтобы найти эффективное решение.
1. Причина проблемы
Когда вы передаете строку в wp_insert_post
, функция ожидает, что все входные данные будут должным образом экранированы. Если строка содержит неэкранированные символы, такие как апострофы, это может привести к тому, что данные будут обрабатываться некорректно. В вашем случае строка "If you’re in need, this is who you call"
обрывается на слове "you", поскольку интерпретатор PHP воспринимает апостроф как завершение строки.
2. Решение с использованием функции esc_sql
Для корректной вставки строк в базу данных WordPress, рекомендуется использовать функцию esc_sql
, которая поможет экранировать символы в строках. Это можно сделать следующим образом:
$question = "If you’re in need, this is who you call";
$question = esc_sql($question); // Экранирование строки
$post = array(
'post_title' => $question,
'post_status' => 'publish',
'post_type' => 'question'
);
$the_post_id = wp_insert_post($post);
3. Альтернативный метод — использование wp_slash
WordPress предоставляет функцию wp_slash
, которая экранирует специальными символами, что также может помочь в вашем случае. Пример использования:
$question = "If you’re in need, this is who you call";
$question = wp_slash($question); // Экранирование строки для SQL
$post = array(
'post_title' => $question,
'post_status' => 'publish',
'post_type' => 'question'
);
$the_post_id = wp_insert_post($post);
4. Проблемы с исходными данными
Если ваш вопрос связан с тем, что данные поступают из массива, при этом они могут содержать неожиданное форматирование, убедитесь, что при их получении вы также применяете экранирование.
5. Заключение
Использование esc_sql
или wp_slash
— это надёжные способы избежать проблемы с тем, что апострофы и другие специальные символы могут искажать ваши строки. Важно не забывать о необходимости экранирования данных перед их обработкой с базой данных.
Если у вас остались дополнительные вопросы или необходима помощь с другими аспектами кода, буду рад помочь.