Index: fop-core/src/main/java/org/apache/fop/pdf/PDFUri.java
===================================================================
--- fop-core/src/main/java/org/apache/fop/pdf/PDFUri.java	(revision 1835825)
+++ fop-core/src/main/java/org/apache/fop/pdf/PDFUri.java	(working copy)
@@ -64,7 +64,7 @@
             byte[] enc = getDocument().getEncryption().encrypt(buf, this);
             return PDFText.toHex(enc, true);
         } else {
-            return "(" + text + ")";
+            return PDFText.escapeText(text, false);
         }
     }
 }
Index: fop-core/src/test/java/org/apache/fop/pdf/PDFLinkTestCase.java
===================================================================
--- fop-core/src/test/java/org/apache/fop/pdf/PDFLinkTestCase.java	(revision 1835825)
+++ fop-core/src/test/java/org/apache/fop/pdf/PDFLinkTestCase.java	(working copy)
@@ -387,10 +387,36 @@
                     quote("<< /URI (https://xmlgraphics.apache.org/fop/fo/fonts.fo)")},
 
             // HTML files
-            {"examples.html#foo", quote("<< /URI (examples.html#foo)")}, //177
+            {"examples.html#foo", quote("<< /URI (examples.html#foo)")}, //176
             {"examples.html?foo#bar", quote("/URI (examples.html?foo#bar)")},
             {"examples.html", quote("<< /URI (examples.html)")},
             {"file:examples.html", quote("<< /Type /Filespec /F (examples.html)")},
+            
+            // URI special characters
+            {"foo bar _-!.~'(),;$&+=@%.docx", 
+                    quote("<< /URI (foo%20bar%20_-!.~'\\(\\),;$&+=@%25.docx")}, //180
+            {"./foo bar _-!.~'(),;$&+=@%.docx", 
+                    quote("<< /URI (./foo%20bar%20_-!.~'\\(\\),;$&+=@%25.docx")},
+            {"c:\\foo bar _-!.~'(),;$&+=@%.docx", 
+                    quote("<< /Type /Filespec /F (c:/foo bar _-!.~'\\(\\),;$&+=@%.docx)")},
+            {"file:foo bar _-!.~'(),;$&+=@%.docx", 
+                    quote("<< /Type /Filespec /F (foo bar _-!.~'\\(\\),;$&+=@%.docx)")},
+            {"file://foo bar _-!.~'(),;$&+=@%.docx", 
+                    quote("<< /Type /Filespec /F (foo bar _-!.~'\\(\\),;$&+=@%.docx)")},
+
+            {"foo bar _-!.~'(),;$&+=@%.pdf#dest=aa", 
+                    quote("<< /URI (foo%20bar%20_-!.~'\\(\\),;$&+=@%25.pdf#dest=aa")}, //185
+            {"./foo bar _-!.~'(),;$&+=@%.pdf#page=2", 
+                    quote("<< /URI (./foo%20bar%20_-!.~'\\(\\),;$&+=@%25.pdf#page=2")},
+            {"c:\\foo bar _-!.~'(),;$&+=@%.pdf#dest=aa", 
+                    quote("<< /Type /Filespec /F (c:/foo bar _-!.~'\\(\\),;$&+=@%.pdf)") + ".*" + 
+                    quote("/S /GoToR") + ".*" + quote("/D (aa)")},
+            {"file:foo bar _-!.~'(),;$&+=@%.pdf#page=2", 
+                    quote("<< /Type /Filespec /F (foo bar _-!.~'\\(\\),;$&+=@%.pdf)") + ".*" + 
+                    quote("/S /GoToR") + ".*" + quote("/D [ 2 /XYZ null null null ]")},
+            {"file://foo bar _-!.~'(),;$&+=@%.pdf#dest=aa", 
+                    quote("<< /Type /Filespec /F (foo bar _-!.~'\\(\\),;$&+=@%.pdf)") + ".*" +
+                    quote("/S /GoToR") + ".*" + quote("/D (aa)")}
         });
     }
 
