Экранирование кавычек в PHP из результата MySQL (PDO)

Строка для отображения происходит из таблицы MySQL. Я использую запросы PDO. Строка содержит двойные кавычки:

Старое написание (от французского). Модернизированная «мелкая кража» теперь предпочтительнее.

Это определение словарной записи, которая отображается, если она доступна:

$search_results .= (!empty($english_definition)? "<a class=\"definition\" href=\"#\" data-toggle=\"popover\" rel=\"popover\"data-content=\"".$english_definition."\">".$english."*</a>" : $english);

Из-за кавычек определение сокращено до слова «модернизированный».

Я пытался с помощью addslashes() но в результате отображается один слеш, и ничего после него.

Я также попытался добавить косые черты внутри поля таблицы, например,

Старое написание (от французского). Модернизированная \ «мелкая кража \» сейчас предпочтительнее.

Без stripslashes() в коде PHP отображается только первая обратная косая черта и ничего после нее.

Когда я добавлю stripslashes()ничего не отображается после слова «модернизированный».

Итак, вот где я застрял.

ДОПОЛНИТЕЛЬНЫЙ КОД:
Вот как я вставляю новые термины и определения. я добавил htmlspecialchars() для ввода, где могут существовать кавычки:

        if(isset($_POST['submit'])) {

$english                = htmlspecialchars($_POST['english']);
$english_abbr           = $_POST['english_abbr'];
$variant                = $_POST['variant'];
$bulgarian              = htmlspecialchars($_POST['bulgarian']);
$bulgarian_abbr         = $_POST['bulgarian_abbr'];
$theme_id               = $_POST['theme_id'];
$english_definition     = htmlspecialchars($_POST['english_definition']);
$bulgarian_definition   = htmlspecialchars($_POST['bulgarian_definition']);

// Check if an entry already exists
$exists = $db->prepare("SELECT * FROM ".DICTIONARY_TABLE." WHERE english = :english AND theme_id = :theme_id ");
$exists->execute(array(':english' => $english, ':theme_id' => $theme_id));
$count = $exists->rowCount();
if($count > 0) {
echo "<h3 style=\"color:navy; background:transparent;\">&#8658; An entry in the same theme already exists.</h3>";
}
else {
$insert = $db->prepare("INSERT INTO ".DICTIONARY_TABLE."(english, english_abbr, variant, bulgarian, bulgarian_abbr, theme_id)
VALUES
(:english, :english_abbr, :variant, :bulgarian, :bulgarian_abbr, :theme_id)");
$insert->execute(array(':english'           => $english,
':english_abbr'     => $english_abbr,
':variant'          => $variant,
':bulgarian'        => $bulgarian,
':bulgarian_abbr'   => $bulgarian_abbr,
':theme_id'         => $theme_id));

if($insert) {
echo "<h4 style=\"color:green; background:transparent;\">&#8658; Term \"$english\" inserted successfully.</h4>";

if(!empty($english_definition) || !empty($bulgarian_definition)) {
$insert_id = $db->lastInsertId();
$insert_def = $db->prepare(
"INSERT INTO ".DICTIONARY_DEFINITIONS."(term_id, english_definition, bulgarian_definition)
VALUES
(:term_id, :english_definition, :bulgarian_definition)");
$insert_def->execute(array(
':term_id' => $insert_id,
':english_definition'   => $english_definition,
':bulgarian_definition' => $bulgarian_definition));

if($insert_def) {
echo "<h4 style=\"color:green; background:transparent;\">&#8658; Definition(s) inserted successfully.</h4>";
}
else {
echo "<h4 style=\"color:red; background:transparent;\">&#8658; There was a problem inserting the definition(s)!</h4>";
}
}

unset($_POST); $_POST = array();
}
else {
echo "<h4 style=\"color:red; background:transparent;\">&#8658; There was a problem executing the query: </h4>";
}
}
include("insert_form.php");
}
else {
include("insert_form.php");
}

0

Решение

использование htmlspecialchars() функция, когда вы сохраните его в базе данных, и htmlspecialchars_decode() функция, когда вы хотите повторить это снова.

Ссылка на функцию htmlspecialchars ()

Ссылка на функцию htmlspecialchars_decode ()

0

Другие решения

Это немного расплывчатый вопрос, и если вы будете использовать pdo правильно, я даже не думаю, что вам придется иметь дело с косой чертой, но если вы не хотите, чтобы данные отображались без косой черты, пробовали ли вы использовать замену строк?

$search_result = str_replace ("/", "", $search_result);

Это должно достигнуть того, что вы хотите, если я понимаю, что ваш вопрос правильно

0

По вопросам рекламы [email protected]