Проблема со специальными символами и двойными кавычками в PHP

У меня есть такое значение в моем столбце БД,

Судья-Фюрстова Мила "Ut enim ad minim veniam"

Я использую PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8" для обработки всех своих специальных символов,

class database_pdo
{
    # database handler
    protected $connection = null;

    # make a connection
    public function __construct($dsn,$username,$password)
    {
        try 
        {

            $this->connection = new PDO($dsn, $username, $password, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
            $this->connection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

        }
        catch (PDOException $e) 
        {
            # call the get_error function
            $this->get_error($e);
        }
    }
    ...
    ...
    ...

 }

И когда я пытаюсь напечатать это значение в поле ввода,

<input name="title" type="text" value="<?php echo $page->title;?>"/>

В поле ввода я получаю только судья-Фюрстова Мила.

Если я использую htmlentities для решения проблемы с двойными кавычками,

<input name="title" type="text" value="<?php echo htmlentities($page->title);?>"/>

Я получаю это в поле ввода,

Судья-Фюрстовю Мила "Ut enim ad minim veniam"

Итак, как я могу сразу исправить эту проблему со специальными символами и двойными кавычками?


person laukok    schedule 19.04.2012    source источник


Ответы (2)


Попробуйте использовать htmlspecialchars() вместо htmlentities().

person Ivan Pintar    schedule 19.04.2012
comment
Спасибо. Я только что попробовал, но я получаю только Judge-Fürstová Mila вместо Judge-Fürstová Mila "Ut enim ad minim veniam"... - person laukok; 19.04.2012
comment
htmlspecialchars() на самом деле лучше, чем использование htmlentities() в этом случае - person German Rumm; 19.04.2012
comment
@lauthiamkok htmlspecialchars должен это сделать, как выглядит источник, когда вы его используете? - person jeroen; 19.04.2012
comment
@lauthiamkok Странно, я попробовал простое эхо на входе здесь, и это работает. Может быть, кто-то еще знает, есть ли какие-то настройки ini или что-то еще для htmlspecialchars или htmlentities. - person Ivan Pintar; 19.04.2012

htmlentities() по умолчанию работает с кодировкой ISO-8869-1 до PHP5. 4

Попробуйте указать параметр кодировки для вызова функции:

<?php echo htmlentities($page->title, ENT_COMPAT | ENT_HTML401, 'UTF-8');?>

Тем не менее, нет способа обойти предоставление второго параметра, но ENT_COMPAT | ENT_HTML401 в любом случае используется по умолчанию.

person German Rumm    schedule 19.04.2012
comment
Спасибо. Я только что попробовал, и, как и в предложении Pinetree, я получаю только судью-Фюрстову Милу вместо судьи-Фюрстову Милу Ut enim ad minim veniam... - person laukok; 19.04.2012
comment
нет, извините, на самом деле я получаю это сообщение об ошибке, Use of undefined constant ENT_HTML401 - assumed 'ENT_HTML401' in <b>C:\wamp\www\xxx\form_page_update.php</b> on line ... - person laukok; 19.04.2012
comment
@lauthiamkok ENT_HTML401 доступен только на PHP 5.4+. Просто удалите константу из второго параметра, и все должно работать нормально, и вы получите правильно проанализированную строку. - person Kemal Fadillah; 19.04.2012
comment
простите за ошибку, Герман Румм. У меня 5.3.10... теперь работает с htmlspecialchars(). - person laukok; 19.04.2012
comment
@lauthiamkok, да, htmlspecialchars() гораздо лучше подходит для твоего случая. - person German Rumm; 19.04.2012