diff --git a/fillpdf.admin.inc b/fillpdf.admin.inc index 1a3a274f9e58597bb0afee5c9bd93dc3ff8828ed..da2ea0eabc68711357b9a126ff2cb409ae9ffcb6 100644 --- a/fillpdf.admin.inc +++ b/fillpdf.admin.inc @@ -373,7 +373,9 @@ function fillpdf_form_edit($form, &$form_state, $fid) { check_plain($field->pdf_key), $field->value, // editable, expandable ($field->replacements ? 'Yes' : 'No'), - l(t('Edit'), "admin/structure/fillpdf/$fid/edit/{$field->pdf_key}"), + // rawurlencode() is needed twice to fully protect "/". Otherwise, "/" is + // taken as a separator when looking for a match in hook_menu(). + l(t('Edit'), "admin/structure/fillpdf/$fid/edit/" . rawurlencode(rawurlencode($field->pdf_key))), ); $rows[] = $row; } @@ -638,6 +640,7 @@ function fillpdf_field($op, $fid, $pdf_key = NULL) { return fillpdf_form_overview($pdf_form); } elseif ($pdf_key) { + $pdf_key = rawurldecode(rawurldecode($pdf_key)); $field = db_query("SELECT * FROM {fillpdf_fields} WHERE pdf_key = :pdf_key AND fid = :fid", array(':pdf_key' => $pdf_key, ':fid' => $fid))->fetch(); if (!$field) { drupal_not_found();