How to make urls (and delimiters such as \, /, : and @) wordwrap in Word

Or: How to insert a zero-width space in your documents

Article contributed by Klaus Linke and Dave Rado

Many delimiter characters, such as the forward slash used in urls and the backslash used in file paths, don't wordwrap in Word, although in most cases one would want them to.

Fortunately, in Word 2000 and above, you can make them wrap by inserting a zero-width space character (Unicode character 200B, decimal 8203) immediately after the delimiter character. Unfortunately, the zero-width space character is not supported in Word 97. If you open a document containing zero-width spaces in Word 97, they will display and print as small empty boxes; so the following is really only useful if you will not be sending Word documents to Word 97 users. You could get round this problem by distributing Word 2000+ documents  in PDF format, however – the PDFMaker macro copes without any glitches; the hyperlinks it creates in the PDF preserve their wordwrap while still working as hyperlinks.

Note that if you want to insert a zero-width space into a hyperlink, you must create the hyperlink first, and then insert the zero-width spaces afterwards – otherwise the hyperlink won't work (won't be valid).

If you have non-printing characters displayed, the zero-width space displays as a bordered box likethis.

Unfortunately, you can't access the zero-width space character via Insert + Symbol + Special Characters, which is worth contacting about. However, there are a number of ways of inserting a zero-width space character:


Assign the following macro to a keyboard shortcut or toolbar button

Sub InsertZeroWidthSpace()
    Selection.InsertAfter ChrW(8203)
    Selection.Collapse Direction:=wdCollapseEnd
End Sub


Select Insert Symbol, choose a big Unicode font like Arial Unicode MS, and go to the subset General Punctuation. Click on the 12th space character (empty box); the Code 200B should appear in the status bar of the document. Define a keyboard shortcut for that character in the same dialog (Note: You don't really need a big font for this character; unfortunately, it just doesn't show up in the InsertSymbol dialog for smaller fonts).


If you are using Word 2000, you can type Alt-8203 in any dialog box, (you have to type the numbers using the numeric keypad; if you don't have one, you can't use this method); cut the character with Ctrl-X and paste it into the text with Ctrl-V.


If you are using Word 2002, you can type 200B in the document and press Alt+X.


You can create AutoCorrect entries for any characters that you always (or almost always) want to be followed by a zero-width space, so that they will word-wrap. But beware – it would be very dangerous to use this method for characters that you use in urls or email addresses, such as backslash or forward slash characters, because if you do that, you will create invalid hyperlinks (unless you have switched off Replace internet and network paths with hyperlinks under Tools + AutoCorrect + AutoFormat As You Type). For characters used in urls you will need to use one of the other methods.

If you want to create such an AutoCorrect entry – for example, if you want all your underscores to be automatically followed by a zero-width space – insert an underscore in your document, followed by a zero-width space: _. Select both characters and choose Tools + Autocorrect. The right-hand side of the dialog (where it says With) will be automatically filled in. Don't worry about the fact that the space doesn't display correctly in the dialog – it will insert correctly. In the left hand side of the dialog (where it says Replace) type an underscore. Click OK. From now on, wherever you type an underscore, a zero-width space will be inserted as well.


You can create AutoText entries; the procedure is more or less the same as creating AutoCorrect entries, and it's less risky (but less convenient).


Alternatively, you could do a Find and Replace with wildcards. For instance, the following macro will add a zero-width space after any forward slashes or backslashes that are preceded and followed by an alphabetic or numeric character (so it will leave http:// alone, for instance, and it won't insert doubled-up zero-width spaces if run multiple times):

Sub InsertZeroWidthSpaceAfterSlashes()

With Selection.Find
   .Forward = True
   .Format = False
   .MatchCase = False
   .MatchWholeWord = False
   .MatchWildcards = True
   .MatchSoundsLike = False
   .MatchAllWordForms = False

   .Wrap = wdFindContinue
   .Text = "([a-zA-Z0-9]/)([a-zA-Z0-9])"
   .Replacement.Text = "\1" & ChrW(8203) & "\2"
   .Execute Replace:=wdReplaceAll

   .Wrap = wdFindContinue
   .Text = "([a-zA-Z0-9][\\])([a-zA-Z0-9])"
   .Replacement.Text = "\1" & ChrW(8203) & "\2"
   .Execute Replace:=wdReplaceAll

    'Clear the settings again
   .Text = ""
   .Replacement.Text = ""
   .MatchWildcards = False

End With

End Sub

Note; If doing the Replace manually use ^u8203 rather than ChrW(8203).

For many more examples of wildcard searches, and for in-depth coverage of how to use wildcards, see: Finding and replacing characters using wildcards.

Some gotchas


As mentioned previously, if a document containing zero-width spaces is opened in Word 97, they will display and print as small empty boxes. You can get round this by distributing Word documents in PDF format; 


If you paste into Notepad the space disappears. If you paste into any application As Text, the space also disappears. If you copy text containing the zero-width space and paste as Unformatted Unicode Text in Word 2000+, the character is also lost (this is a bug, and worth contacting about).

If you paste As Rich Text into an application that supports Unicode (such as Publisher) the zero-width space remains a zero-width space.

But if you paste (or import) as rich text into any rich-text-supporting application that doesn't support Unicode (such as CorelDraw or PageMaker) you get either a square box or a question mark (depending on the application) – but that happens with any upper Unicode characters you use, not just this one.


A search for some/text will not find some/text. You can get round that by searching for some/^?text” (or some/?text”, with wildcards switched on).

It would be nice if the zero-width-space could be  ignored when you do a Find and Replace (just as optional hyphens are); this is also well worth contacting about.