We had the same issue where toolbar icons were not displaying. We were using the CDN version provided by "https://cdn.tiny.cloud/1/YOUR_CODE/tinymce/5/tinymce.min.js". None of the suggestions above worked.
Then I realized the issue is with HTML vs XHTML. On pages served with HTTP Content-Type=text/html, the icons are displayed. On pages served with Content-Type=application/xml or application/xhtml+xml, they do not appear.
The reason for this is that for true xhtml, the XML DOM does not recognize the "svg" elements which are used by tinymce. In order for the XML DOM to treat the svg elements correctly, they have to be in the svg namespace.
To correct the display of icons, I switch to a self hosted tinymce and added the namespace attribute to each of the icons in tinymce/icons/default/icons.js and icons.min.js:
tinymce.IconManager.add('default', {
icons: {
accessibility-check: <svg xmlns="http://www.w3.org/2000/svg" width="24" [ect...]
For us, this worked. The solution should not impact pages served as regular html, since the xmlns attribute is not known to that DOM (afaik).
A better solution that would work for all icons (not just the defaults), would be to add a test in the script that creates the toolbar buttons: if(doctype is xhtml) add xmlns="..." to the svg element that was created if it does not exist. This is beyond the scope of what we can do and will leave it to others to suggest to the develpment team.