PHP Функция Htmlentities не кодирует строку в базу данных с помощью PDO - PullRequest
0 голосов
/ 27 мая 2020

У меня есть строка (иностранный язык), и мне нужно преобразовать ее в htmlentities.
Я запускаю сценарий php со своего терминала на linux Ubuntu.

Мне нужно это:

$str = "Ettől a pillanattól kezdve,"

Чтобы стать примерно таким:

EttЗl a pillanattßl kezdve,

$str = "Ettől a pillanattól kezdve,";
$strEncoded = htmlentities($str, ENT_QUOTES, "UTF-8");  

$cmd = $pdo->prepare("UPDATE table SET field = :a");
$cmd->bindValue(":a", $strEncoded);  

$cmd->execute();

Информация о базе данных / таблице:

  • Кодировка: utf8
  • Параметры сортировки: utf8_general_ci

Не выполняется ожидаемое сохранение. Замечания: Я знаю, что использовать htmlentities для сохранения в базу данных - не лучшая практика, но мне нужно сделать это таким образом.

Пример 2:

$a = "Quantità totale delle";
$b = html_entity_decode($a);
echo $a; //output: Quantità totale delle
echo $b; //output: Quantità totale delle (Need the reverse)
echo htmlspecialchars($b, ENT_QUOTES, 'UTF-8') . "\n"; //output: Quantità totale delle (didn't convert the special character to `à`  

1 Ответ

1 голос
/ 27 мая 2020

Чтобы соответствовать вопросу, вы должны самостоятельно перестроить объект, используя значение de c. Это будет работать со строками, как вы указали:

<?php 
$str = str_split("Ettől a pillanattól kezdve,");

foreach ($str as $k => $v){
 echo "&#".ord($v).";";  
} 
// &#69;&#116;&#116;&#197;&#145;&#108;&#32;&#97;&#32;&#112;&#105;&#108;&#108;&#97;&#110;&#97;&#116;&#116;&#195;&#179;&#108;&#32;&#107;&#101;&#122;&#100;&#118;&#101;&#44;

Но это не будет работать для символов выше 255.

https://www.php.net/manual/en/function.ord.php

Интерпретирует двоичное значение первого байта строки как целое число без знака от 0 до 255. Если строка имеет однобайтовую кодировку, такую ​​как ASCII, ISO-8859 или Windows 1252, это эквивалентно для возврата позиции символа в таблице сопоставления набора символов. Однако обратите внимание, что эта функция не знает никакой строковой кодировки и, в частности, никогда не идентифицирует кодовую точку Unicode в многобайтовой кодировке, такой как UTF-8 или UTF-16.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...