Monthly Archives: March 2010

These are from my notes that I took when setting up IIS 7.5 on Windows 7. It’s not supposed to be a how-to, exactly. It’s just what I need to do to get my dev server up and running classic .ASP pages.

Install IIS via Control Panel -> Programs and Features -> “Turn Windows features on or off”.

Click the box next to Internet Information Services. It will become blocked, not checked, indicating some but not all features are installed. Click OK.

Once Windows has installed IIS, browse to http://localhost/ to confirm the server has started.

If you browse to an .asp page, though, you’ll get a Server Error:

HTTP Error 404.3 – Not Found
The page you are requesting cannot be served because of the extension configuration. If the page is a script, add a handler. If the file should be downloaded, add a MIME map.

To enable the server to run classic .ASP pages, go back to Control Panel -> Programs and Features -> “Turn Windows features on or off”, then expand Internet Information Services -> World Wide Web Services -> Application Development Features. Check the box next to ASP, then click OK.

Parent Paths is disabled by default on IIS 7.5. To enable it, run the following command as administrator:

%systemroot%\system32\inetsrv\APPCMD set config "Default Web Site" -section:system.webServer/asp /enableParentPaths:"True" /commit:apphost

Credit: http://learn.iis.net/page.aspx/566/classic-asp-parent-paths-are-disabled-by-default/

Classic ASP script error messages are no longer shown in the web browser by default on IIS 7.5. Misconfigurations are hard to troubleshoot, because IIS returns only:

An error occurred on the server when processing the URL. Please contact the system administrator.
If you are the system administrator please click here to find out more about this error.

To enable sending detailed ASP script error messages to the Web browser (as was the case in IIS 6), run the following command as administrator:

%windir%\system32\inetsrv\appcmd set config -section:asp -scriptErrorSentToBrowser:true

Credit: http://blogs.iis.net/bills/archive/2007/05/21/tips-for-classic-asp-developers-on-iis7.aspx

To start the default web site from the command line, run the following command as administrator:

%systemroot%\system32\inetsrv\APPCMD start site "Default Web Site"

To stop the default web site from the command line, run the following command as administrator:

%systemroot%\system32\inetsrv\APPCMD stop site "Default Web Site"

Even better, you can make shortcuts to batch files that contain those commands, and then set the shortcuts to always run as administrator.

The c:\inetpub\wwwroot directory is UAC-protected. If you are going to leave UAC on (and it’s recommended that you do), you will probably want to change the NTFS permissions on the wwwroot folder so that you don’t have to click through a prompt each time you change a file.

The IIS Manager app is located at Control Panel -> Administrative Tools -> Internet Information Services (IIS) Manager.

In May, 2011, the Xbox Forums were redesigned and some, but not all, of the existing content moved to a new subdomain: http://forumsarchive.xbox.com. I’ve updated the post to fix the links so they no longer 404, but the rest of the information is dated and probably inaccurate.

I was having some problems with Final Fantasy XIII freezing on my Xbox 360, so I posted a few times to the Xbox Forums at http://forums.xbox.com/. The posts contained a link to a blog post here on ardamis.com that explained my situation in greater detail. I started to wonder if the forums were searcheable in Google, so I checked and found that for the most part, they weren’t.

The regular forum thread URLs contain a nofollow, noindex robots meta tag and end with ‘ShowPost.aspx’, but if you click on the Print button, you’re taken to a URL that ends with ‘PrintPost.aspx’. These printer-friendly pages have no such tag.

If you Google this – site:forums.xbox.com – you’ll see what I mean. There are currently less than a thousand results in Google.

This post is just to test whether I can get a PrintPost.aspx page indexed in Google by linking to it, and whether I can create an inbound link from forums.xbox.com by linking to the printer-friendly version of a thread that contains a link back to a page on ardamis.com.

The URL to the normal thread: http://forumsarchive.xbox.com/31588531/ShowPost.aspx
The URL to the printer-friendly page: http://forumsarchive.xbox.com/31588531/PrintPost.aspx

The URL to the normal thread: http://forumsarchive.xbox.com/31685953/ShowPost.aspx
The URL to the printer-friendly page: http://forumsarchive.xbox.com/31685953/PrintPost.aspx

To test, as of 03.17.2010…
Your search – site:forums.xbox.com ardamis – did not match any documents.

Update: 03.18.2010

Both PrintPost.aspx pages are now indexed. Google Webmaster Tools still doesn’t know of any inbound links to my Final Fantasy post, although there are probably a handful by now.

Update: 03.19.2010

The PrintPost.aspx pages are now showing up as the first two results in Google for final fantasy xiii xbox freeze. My post is the third result.

Update: 03.31.2010

My post is now the first result for final fantasy xiii xbox freeze. The PrintPost.aspx pages are now showing up as the second and third results.

Update: 06.26.2010

The answer is Yes, it is possible to get inbound links that show up in Google Webmaster Tools from forums.xbox.com.

Report this problem to Microsoft.
If you are experiencing freezing in Final Fantasy XIII, report it to Xbox support.

Toll free: (800) 4MY-XBOX or (800) 469-9269
9:00 A.M. to 1:00 A.M. Eastern Time
Have your console serial number ready.
Be in front of your console for troubleshooting.

My Xbox 360 started freezing up last night after a few hours playing Final Fantasy XIII. Either the screen would suddenly go snowy/blank with a bluish-gray tinge, or it would freeze/lock up but keep displaying the last ‘frame’ of whatever was happening. This happened maybe three times, and each time I had to power off at the console, because while the first segment of the ring on the console and the controller stayed lit, the console stopped responding to the controller. There was no discernible difference in the CD ROM activity at the point of lock-up, or before or after it.

I figured that maybe the unit was overheating, and I was falling asleep anyway, so I called it a night.

Today, I turned it on, loaded my last saved game, and no more than turned my character around to face the other direction when it froze and gave me a blank screen.

Because the unit had been on for less than 4 minutes, it seemed that overheating was pretty unlikely. I started to Google around to see if this was affecting other Final Fantasy owners, but didn’t find much. My game is freezing during Chapter 3: Branded, at Lake Bresha – The Waters Stilled. Each time I turn toward a group of Cie’th, it freezes. If I just sit at the spawn point and watch the fireflies for awhile, I don’t seem to have any problems.

Microsoft’s support page for Screen freezes when you use your Xbox 360 console has 7 steps for troubleshooting this sort of issue. I’ve gone through each one.

I checked the DVD and it’s pristine – it has been handled exactly once, when I removed it from the case and carefully put it into the drive.

I tried another game (Lego Star Wars) and played it for about half an hour with no problems. I’ve messed around in the Dashboard menus for about 5 minutes with no issues.

I haven’t been connected to Xbox Live since I bought the game. It’s not even connected to my router.

I set the console upright instead of on its side, well away from anything that might be blocking airflow and still crashed.

I cleared the system cache, tried again and locked up.

I made it back to the save point, saved the game to a memory card, and then crashed.

I loaded the game from the new save on the memory card and crashed.

I removed the hard drive, loaded the game from the memory card save, and played for about 2 minutes before crashing again.

I loaded the game from an earlier save point and it crashed within a minute at a point that I played through fine the night before.

At this point, I’m out of ideas. It’s gotta be the game making the Xbox do something that it can’t handle, or a defect with the disk that is not due to mistreatment. My Xbox was actually one I got in exchange from Microsoft when I shipped back a unit suffering from the RRoD. Its date of manufacture is 2006-12-16, so maybe that has something to do with it.

Update: 13 March 2010

I called Xbox support last night and asked if anyone had reported freezing in Final Fantasy, and the guy said I was the first. He suspected the disc, and suggested I return the game or try the disc in a different Xbox. He was pretty surprised to hear that the freezing occurred while the hard drive was disconnected. I asked if they still did replacements like in the RRoD days, and he avoided answering, pointing out that the problem seems to be isolated to the one game.

In a last ditch effort, I decided to install the game to the hard drive and run it from there. It didn’t make any difference – the lockups continued to happen within a minute or two of loading a saved game.

I also figured I’d get on Live and see if there were any patches or updates to download, but none are available so far.

I air dusted the Xbox and the power supply brick, too.

My feeling is that it’s a GPU issue. The last time it froze, instead of blank/snow or a frozen frame, I got a series of blue vertical lines.

If the problems continue today, I’m going to:
a) exchange the game and try different discs,
b) put my hard drive on another unit and test, and
c) bug Xbox support again.

Update: 13 March 2010 (Part 2)

I exchanged the game, popped in the new disc, removed the hard drive, loaded from the save on the memory unit, and it froze. So, to rule out a corrupt save somewhere, I started a brand new game from the DVD with the hard drive still disconnected and it froze in the middle of the second battle. It is not a media issue, a hard drive issue, or a corrupted save issue.

The only thing potentially odd about my setup is that I’m running at 1280 x 720 widescreen resolution output to VGA via a Microsoft Xbox 360 HD AV Cable instead of the usual component output. I’m running Dashboard: 2.0.8955.0.

Update: 14 March 2010

I tried changing the resolution to 1024×768 and it still froze.

I called Microsoft for the second time.

The tech support girl on this call also was unaware of any other reports of Final Fantasy XIII freezing, and sent me through the same basic troubleshooting script, with the addition of disconnecting and reconnecting the cables (something I’d already really done) and verifying that I had enough free space on my hard drive to install any updates (check, 5.9 GBs free). She asked me to turn the console on and off, which I did. While I didn’t realize it until after the call was over, Final Fantasy had started up and then froze at the title screen. I pointed out that I had logged 4 hours of game time without any problems, and haven’t been able to play for more than 3 or 4 minutes at a time since the first freeze, that I was freezing in brand new, unsaved games, with and without the hard drive attached, while online and offline. At every opportunity, she countered with “If it plays other games, then it’s not broken.”

All she could offer was a recommendation to first verify that the game disc was fine by playing it in another console, then send mine in for a $99.99 out-of-warranty repair.

She asked me when I bought the Xbox, so I got to tell her that I didn’t buy it – Microsoft sent it as a replacement to my RRoD’d unit. This makes me think they should offer a life-time replacement guarantee on their replacements, rather than a 1-year warranty.

After I got off the phone, I played two hours of BioShock without any problems.

Basically, the situation is this: I need to get my hands on another Xbox, prove to myself that the disc is fine, then decide whether to have my unit repaired or buy a new one.

Option 1 – Repair: I give them my 2006 Xenon Xbox and $99.99, wait for them to troubleshoot it and then ship me a replacement. This will most likely be a refurbished unit of unknown age (probably an Opus).

Option 2 – Replace: I keep my otherwise perfectly fine Xbox, go to Target and buy a brand new Jasper Arcade for $199.99, or roll the dice with a refurb from Gamestop for $159.99.

Ideally, Microsoft will come around and replace the unit for free, but if it won’t, I’d rather pay the extra $100 and get a second unit, a new power supply, and another controller.

Update: 15 March 2010

I submitted a support ticket to Square Enix at https://support.na.square-enix.com/ after 10 unsuccessful minutes trying to find a phone number.

I began to wonder if the problem was with my 64 MB memory unit, so I moved my profile from the memory unit to the hard drive, removed the memory unit, and put the second disk in. (It’s bad troubleshooting procedure to change two variables, I know.) I started up Disc 2 and tried to open the Settings menu and it froze with the blue vertical stripes. I guess this rules out the disc and the memory unit.

I air dusted the CD ROM drive again for good measure.

I did notice a good deal of heat buildup at the bottom of the console toward the back, right underneath the fans. I checked to make sure both were spinning, and they were. I see only a very little bit of dust on the fan blades and heat sink fins. But this puppy does pump out hot air like nobody’s business.

I played another 2 hours of BioShock tonight, and about 1.5 hours in, the game hiccupped a few times – freezing momentarily, for maybe half-a second or so, but then resuming. Eyebrow-raising, but not enough to convince me that the system was bad. But at the 2 hour mark, it completely froze. This wasn’t entirely unexpected, but I’m bummed none-the-less, because it was working fine for 2-hour (or longer) sessions of Modern Warfare 2 just a few weeks ago. Still, why would I be able to play one game for hours before having problems, but another game freezes before I even have a chance to load a save? And was FFXIII the straw that broke the camel’s back?

Update: 16 March 2010

Now I’m worried that the unit is really damaged, that even if a software patch comes out, it will be too late. What’s more, I don’t want to test the game in my nephew’s Xbox for fear of causing similar damage to his system.

I spent some time Googling today. There are lots people reporting this issue, and many of them have exchanged their discs. None of the posts that mention exchanging the game report that it resolved the issue. Of all the dozens of reports of problems, there are no known resolutions and no acknowledgement by Microsoft, Sony, or Square Enix that a problem exists. Hilariously, a number of people have posted that their calls to various tech support numbers have all been ‘the first they’ve heard of this’. Another surprisingly common observation is that while the problems were first noticed in FFXIII, both Xbox and PS3 consoles quickly began exhibiting problems in other games. Most of the problems occur on older, out-of-warranty consoles, but some newer machines are affected.

On the other hand, I’ve found a few threads wherein people claim that mass breakdowns of consoles occur with each large release. There’s some substance to that, I suppose. Consoles probably wear out at a pretty consistent rate, but around the time of a release, you get lots of people playing a single game and if a console happens to fail at that point, the game is blamed. But I don’t think that this is what’s happening here. Too many people are noting that they’re not playing FFXIII more than say BioShock 2 or Modern Warfare 2, which were other recent big releases. Their systems were operating normally until they started playing FFXIII, and in many cases continued to play other games normally. Less often, but still not uncommonly, once the problems begin, they happen in other games. I was in the former group (and may still be, with luck), and still feel that the game itself is problematic.

The game is also freezing on PS3s, maybe moreso than on the Xbox, and that community seems much more vocal about it. There’s a 7-page thread at http://boardsus.playstation.com/t5/Final-Fantasy-Series/Final-Fantasy-XIII-Freezing/m-p/45391106 and a 5-page thread at http://community.eu.playstation.com/t5/Technical-Help/Final-Fantasy-XIII-problems/td-p/10379629 of people having problems, mostly with older systems. Here’s a video of it freezing, but more exist.

In an attempt to document the scope of the problem, I’ve put together a list of links:

Final Fantasy XIII freezes/locks up
http://forums.xbox.com/31685195/ShowPost.aspx

Final Fantasy XIII | Final Fantasy XIII Freezing Up
http://forums.xbox.com/31660983/ShowPost.aspx

Issues with GPU begin after playing FFXIII
http://forums.xbox.com/31681685/ShowPost.aspx

Final Fantasy XIII Crashing Consistently
http://forums.xbox.com/31660975/ShowPost.aspx

Final Fantasy XIII | Game Freezing
http://forums.xbox.com/31627724/ShowPost.aspx

Final Fantasy XIII | Annoying Freeze Issue?
http://www.xbox360achievements.org/forum/showthread.php?p=2890734

Xbox 360 | Final Fantasy XIII | freezing issues
http://www.gamefaqs.com/boards/genmessage.php?board=950899&topic=53897064

PS3 | Final Fantasy XIII | Warning !! PS3 old fat 40g version , Game freeze!
http://www.gamefaqs.com/boards/genmessage.php?board=928790&topic=53841505

Update: 17 March 2010

I played another 2.5 hours of Bioshock without any issues at all. My fear that FFXIII’s freezing did some lasting harm to the Xbox may be unfounded.

It’s heartening to see that the problem is getting some attention from sites like Kotaku and GamesRadar. Many of the comments to those stories are from people who aren’t experiencing the crashing. While only a small percentage of FFXIII owners are getting the freezing, it’s still quite a real and annoying problem.

Update: 17 March 2010 (Part 2)

Square Enix emailed me this:

Dear Customer,

Regarding your request for technical support. Please find your answer below.

We hope this letter answers your questions.

We apologize for the problems you are having with your SQUARE ENIX Xbox 360 game stalling. Here are some things I would recommend to clear up the problem:

*Be sure to check if there are any scratches or damage to the disc which could cause the laser to have a problem reading it.

* If you’re experiencing problems in some other area of the game, or it is inconsistent to WHERE the game is freezing, it might be something within the system. You may want to try using a cleaner for your system, which can generally be purchased at any video game retailer.

* If you are playing with your Xbox 360 laying flat, you may want to try placing it on its side and playing with it vertically.

* If none of those tips work, try the game in another Xbox 360 at that point to see if it does the same thing. Video game retailers usually have systems for demonstration purposes, and they are usually cooperative when this type of request is made.

*We do highly recommend to install this game on your HDD (which the new Xbox Dashboard update will allow). Doing so here in the office did assist in a smooth gameplay with no problems of frame-rate or graphic/loading problems.

*If you have already installed the game, please now try to uninstall the game and try playing. Another suggestion to correct this may even be to change the resolution of your display. This can be done within the Xbox 360’s display settings under “My Xbox”.

If the problem persists after that, then you may have a defective or damaged disc. Contact our customer support at http://support.na.square-enix.com and if your game is still within the 90-day warranty period you can obtain a replacement.

We hope this information has been of assistance.

Thank you for contacting the SQUARE ENIX Support Center.

I may pursue the replacement discs, but I really doubt that it will make a difference. I’ll confirm that the discs are fine on another machine this weekend. With the exception of cleaning my DVD drive with a lens cleaner, I’ve exhausted their suggestions.

This state of being not-quite-broken is pretty frustrating, and it reminds me of Yossarian’s jaundice in Catch-22.

Yossarian was in the hospital with a pain in his liver that fell just short of being jaundice. If it became jaundice they could treat it. If it didn’t become jaundice and went away they could discharge him. But this just being short of jaundice all the time confused them.

If my Xbox would just completely fail, I would replace it and be happy. But because the problem is with just one game, I keep waiting for a logical explanation and a fix.

If a representative from Microsoft or Square Enix would like my system and discs for troubleshooting, just ask.

Update: 20 March 2010

Here are a few more threads:

Loading/Freezing issue
http://finalfantasy-xiii.net/forums/showthread.php?t=11664

This game and freezing up!
http://www.xbox360achievements.org/forum/showthread.php?p=2900889

Final Fantasy XIII Freeze issues
http://www.gamespot.com/pages/forums/show_msgs.php?topic_id=27230003

Per the email from Square Enix, I uninstalled the game from the hard drive. When I tried to launch it from the disc, I got an unreadable disc error. I removed the DVD and cleaned it, but no joy.

My DVD drive is shot. When the tray closes, it makes two thumping noises and then a little whir. The disc never spins up. This affects all discs.

I rather doubt that FFXIII is to blame for this hardware failure. I acknowledge that systems wear out with use and it could be simply coincidence that my system failed after I bought FFXIII. I’m still looking for an explanation as to why the game played normally for a few hours before freezing the first time, then failed dozens of times within a few minutes of starting up, while other games continued to play for hours.

Certainly, some of the PS3 owners believe that the game is burning out their lasers, but the PS3 game is on dual-layer Blu-ray while the Xbox game is on standard DVD, so it doesn’t seem likely to me that the Xbox DVD drive is working harder to play this game than any other.

I tested the Disc 1 and my most recent save on a different console and everything played perfectly.

I’m left to wonder how much longer my system would have kept going if I hadn’t bought FFXIII. Would it have still failed on the next game purchase?

In the next few weeks, I’m going to buy an Arcade, but my lasting impression of this is that FFXIII is going to end up costing me over $260.

Update: 1 April 2010

I bought an Arcade back on March 21st, and it’s been playing FFXIII from the hard drive without any problems since. It seems that the brief flurry of attention given to the problems associated with FFXIII has died down, too.

The choice of an Arcade instead of something with a HD seems pretty savvy in light of the news that USB memory support for the Xbox 360 is coming on April 6th. So I’ve gone ahead and ordered a 16 GB stick that should look pretty slick.

As an IT guy in a good-sized law firm, I’m sometimes asked to make recommendations for anti-virus software.

For real-time protection that is always running on your computer, I like Microsoft Security Essentials.

Microsoft Security Essentials provides real-time protection for your home PC that helps guard against viruses, spyware, and other malicious software.
http://www.microsoft.com/security_essentials/default.aspx

If you don’t trust Microsoft, SUPERAntispyware has a terrible name but a good track record.

The SUPERAntiSpyware FREE Edition offers real-time blocking of threats.
http://www.superantispyware.com/

The SUPERAntiSpyware Portable Scanner can be run from a USB flash drive or CD without installlation.

The SUPERAntiSpyware Portable Scanner does not install anything on your Start Menu or Program Files and does not need to be uninstalled. Just download it and run it whenever you want.
http://www.superantispyware.com/portablescanner.html

Personally, I run Microsoft Security Essentials, and then do supplemental scans with the SUPERAntiSpyware Portable Scanner.

I’m often given copy for web sites as Word documents. As one would expect, these documents contain all sorts of symbols that should be converted to entities before they can be used in a web page.

For example, ‘smart quotes’ (curly quotes), trademark and registered symbols, em-dashes, and other symbols look great, but can cause problems if you just drop them into a page and don’t use the corresponding character encoding.

Rather than do a global find-and-replace in my HTML editor, I’ve written a few Word macros that replace these symbols.

The first macro, CleanupHTML, replaces smart quotes with straight quotes. The second macro, PrettyHTML, replaces smart quotes with the correct pretty quote, ala .

At some point, I want to extend the macro to replace accented characters, such as è, and also to wrap bold and italics in strong and em tags. Ideally, I’d also find a way of converting lists in Word to straight text wrapped in unordered list items, as lists seem to require the most cleanup when copying and pasting.

Sub CleanupHTML()
'
' CleanupHTML Macro
' Cleanup document for HTML by replacing special characters with entities.
'
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = "&"
        .Replacement.Text = "&"
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = "©"
        .Replacement.Text = "©"
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = "®"
        .Replacement.Text = "®"
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = "™"
        .Replacement.Text = "™"
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = "--"
        .Replacement.Text = "—"
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = "—"
        .Replacement.Text = "—"
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = "–"
        .Replacement.Text = "–"
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = "…"
        .Replacement.Text = "..."
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = "'"
        .Replacement.Text = "'"
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
    With Selection.Find
        .Text = """"
        .Replacement.Text = """"
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
End Sub

Sub PrettyHTML()
'
' PrettyHTML Macro
'
'
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = "&"
        .Replacement.Text = "&"
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = "©"
        .Replacement.Text = "©"
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = "®"
        .Replacement.Text = "®"
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = "™"
        .Replacement.Text = "™"
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = "--"
        .Replacement.Text = "—"
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = "—"
        .Replacement.Text = "—"
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = "–"
        .Replacement.Text = "–"
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = "…"
        .Replacement.Text = "..."
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = ChrW(8220)
        .Replacement.Text = "“"
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = ChrW(8221)
        .Replacement.Text = "”"
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = "'"
        .Replacement.Text = "’"
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = "è"
        .Replacement.Text = "è"
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
End Sub

Many thanks to
http://celebritycola.blogspot.com/2004/09/preserving-formatting-when-posting.html for getting me started on this.