diff --git a/ecrire/inc/filtres.php b/ecrire/inc/filtres.php
index ac6cc65bb957506c733f97271478c59869b7e77c..6d7fa72ae372fd64545036b0bc904280c615e7d5 100644
--- a/ecrire/inc/filtres.php
+++ b/ecrire/inc/filtres.php
@@ -4685,7 +4685,7 @@ function bouton_action($libelle, $url, $class = '', $confirm = '', $title = '',
  * $ligne correspond a la ligne SQL de tous les champs de l'objet, les fonctions
  * de personnalisation n'ont donc pas a refaire de requete.
  *
- * @param int $id_objet
+ * @param int|string|null $id_objet
  * @param string $type_objet
  * @param string $info
  * @param string $etoile
@@ -4693,7 +4693,7 @@ function bouton_action($libelle, $url, $class = '', $confirm = '', $title = '',
  *     Tableau de paramètres supplémentaires transmis aux fonctions generer_xxx
  * @return string
  */
-function generer_objet_info(int $id_objet, string $type_objet, string $info, string $etoile = '', array $params = []): string {
+function generer_objet_info($id_objet, string $type_objet, string $info, string $etoile = '', array $params = []): string {
 	static $trouver_table = null;
 	static $objets;
 
@@ -4925,7 +4925,7 @@ function appliquer_traitement_champ($texte, $champ, $table_objet = '', $env = []
  * Generer un lien (titre clicable vers url) vers un objet
  *
  * @param int $id_objet
- * @param $objet
+ * @param string $objet
  * @param int $longueur
  * @param null|string $connect
  * @return string
diff --git a/ecrire/inc/urls.php b/ecrire/inc/urls.php
index 6ab3fb4d02992c110cee4637e6aa5c1a1a94f598..f4c1085c11819ea6dfe35cf64c09ab9b83a3b65d 100644
--- a/ecrire/inc/urls.php
+++ b/ecrire/inc/urls.php
@@ -301,7 +301,7 @@ function nettoyer_url_page($url, $contexte = []) {
  * L'URL est calculée en fonction de son état publié ou non,
  * calculé à partir de la déclaration de statut.
  *
- * @param int $id Identifiant de l'objet
+ * @param int|string|null $id Identifiant de l'objet
  * @param string $objet Type d'objet
  * @param string $args
  * @param string $ancre
@@ -309,8 +309,9 @@ function nettoyer_url_page($url, $contexte = []) {
  * @param string $connect
  * @return string
  */
-function generer_objet_url_ecrire(int $id, string $objet, string $args = '', string $ancre = '', ?bool $public = null, string $connect = ''): string {
+function generer_objet_url_ecrire($id, string $objet, string $args = '', string $ancre = '', ?bool $public = null, string $connect = ''): string {
 	static $furls = [];
+	$id = intval($id);
 	if (!isset($furls[$objet])) {
 		if (
 			function_exists($f = 'generer_' . $objet . '_url_ecrire')
diff --git a/ecrire/inc/utils.php b/ecrire/inc/utils.php
index b9c2734ecd9f8aaff8acc1803574ef514553e117..1b4578d9292b887b2a4ca80abb3ed31afcc9a14e 100644
--- a/ecrire/inc/utils.php
+++ b/ecrire/inc/utils.php
@@ -1826,11 +1826,11 @@ function charger_fonction_url(string $quoi, string $type = '') {
 
 
 /**
- * Fonction codant et décodant les URLs des objets SQL mis en page par SPIP
+ * Fonction codant  les URLs des objets SQL mis en page par SPIP
  *
  * @api
- * @param string $id
- *   numero de la cle primaire si nombre, URL a decoder si pas numerique
+ * @param int|string|null $id
+ *   numero de la cle primaire si nombre
  * @param string $entite
  *   surnom de la table SQL (donne acces au nom de cle primaire)
  * @param string $args
@@ -1849,10 +1849,11 @@ function charger_fonction_url(string $quoi, string $type = '') {
  *   array : derogatoire, la fonction d'url retourne (objet,id_objet) utilises par nettoyer_raccourcis_typo() pour generer un lien titre
  *           (cas des raccourcis personalises [->spip20] : il faut implementer une fonction generer_spip_url et une fonction generer_spip_url_ecrire)
  */
-function generer_objet_url(int $id, string $entite, string $args = '', string $ancre = '', ?bool $public = null, string $type = '', string $connect = ''): string {
+function generer_objet_url($id, string $entite, string $args = '', string $ancre = '', ?bool $public = null, string $type = '', string $connect = ''): string {
 	if ($public === null) {
 		$public = !test_espace_prive();
 	}
+	$id = intval($id);
 	$entite = objet_type($entite); // cas particulier d'appels sur objet/id_objet...
 
 	if (!$public) {
@@ -1905,13 +1906,14 @@ function generer_url_entite($id = 0, $entite = '', $args = '', $ancre = '', $pub
 
 /**
  * Generer l'url vers la page d'edition dans ecrire/
- * @param int $id
+ * @param int|string|null $id
  * @param string $entite
  * @param string $args
  * @param string $ancre
  * @return string
  */
-function generer_objet_url_ecrire_edit(int $id, string $entite, string $args = '', string $ancre = ''): string {
+function generer_objet_url_ecrire_edit($id, string $entite, string $args = '', string $ancre = ''): string {
+	$id = intval($id);
 	$exec = objet_info($entite, 'url_edit');
 	$url = generer_url_ecrire($exec, $args);
 	if (intval($id)) {
@@ -1970,7 +1972,7 @@ function urlencode_1738($url) {
 /**
  * Generer l'url absolue vers un objet
  *
- * @param int $id
+ * @param int|string|null $id
  * @param string $entite
  * @param string $args
  * @param string $ancre
@@ -1979,7 +1981,8 @@ function urlencode_1738($url) {
  * @param string $connect
  * @return string
  */
-function generer_objet_url_absolue(int $id = 0, string $entite = '', string $args = '', string $ancre = '', ?bool $public = null, string $type = '', string $connect = ''): string {
+function generer_objet_url_absolue($id = 0, string $entite = '', string $args = '', string $ancre = '', ?bool $public = null, string $type = '', string $connect = ''): string {
+	$id = intval($id);
 	$h = generer_objet_url($id, $entite, $args, $ancre, $public, $type, $connect);
 	if (!preg_match(',^\w+:,', $h)) {
 		include_spip('inc/filtres_mini');