Corrigir o método PHP para armazenar caracteres especiais no banco de dados MySQL

Usando PHP, qual é a melhor maneira de armazenar caracteres especiais (como o seguinte) em um banco de dados MSQUL, para evitar injeções.

« " ' é à ù

É assim que eu faço agora:

$book_text=$_POST['book_text'];
$book_text=htmlentities($book_text, "ENT_QUOTES");
$query=//DB query to insert the text

Então:

$query=//DB query to select the text
$fetch=//The fetch of $book_text
$book_text=html_entity_decode($book_text);

Desta forma, todo o meu texto é formatado em entidades HTML. Mas acho que isso ocupa muito espaço no banco de dados. Então, há uma maneira melhor?